Comment : créer des balises actives avec des modules de reconnaissance personnalisés dans Excel et dans .NET Framework 4

Dans les projets Excel qui ciblent le .NET Framework 4, vous pouvez contrôler comment Excel reconnaît des balises actives dans les documents en implémentant l'interface ISmartTagExtension.

Pour exécuter une balise active, les balises actives doivent être activées dans Word ou Excel. Pour plus d'informations, consultez Comment : activer des balises actives dans Word et Excel.

S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau document et de niveau application pour Excel 2007. Pour en savoir plus, consultez Fonctionnalités disponibles par type d'application et de projet Office.

Pour ajouter une balise active avec un module de reconnaissance personnalisé à un classeur Excel

  1. Créez un projet au niveau du document ou de l'application pour Excel 2007. Pour plus d'informations, consultez Comment : créer des projets Office dans Visual Studio.

  2. Ajoutez une référence à l'assembly Microsoft.Office.Interop.SmartTag (version 12.0.0.0) à partir de l'onglet .NET de la boîte de dialogue Ajouter une référence.

  3. Ajoutez un fichier de classe au projet et créez une classe qui implémente l'interface ISmartTagExtension.

  4. Dans la nouvelle classe, créez un objet SmartTag qui représente la balise active et créez un ou plusieurs objets Action qui représentent les actions de balise active. Utilisez les méthodes Globals.Factory.CreateSmartTag et Globals.Factory.CreateAction pour créer ces objets.

  5. Implémentez la méthode Recognize et écrivez votre propre comportement de reconnaissance personnalisé. Votre implémentation doit appeler la méthode PersistTag du paramètre context pour qu'Excel reconnaisse la balise active.

  6. Implémentez la propriété ExtensionBase pour retourner l'objet SmartTag.

  7. Créez des gestionnaires d'événements pour répondre à l'événement Click et, éventuellement, à l'événement BeforeCaptionShow, des actions que vous avez créées.

  8. Dans le fichier de code pour le classeur du projet, ajoutez l'instance de balise active à la propriété VstoSmartTags de la classe ThisWorkbook (pour un projet au niveau du document) ou la propriété VstoSmartTags de la classe ThisAddIn (pour un projet au niveau de l'application).

Exemple

L'exemple de code suivant illustre la création d'une balise active personnalisée dans un classeur Excel. Il implémente la méthode Recognize pour reconnaître les termes sales et organization dans une cellule de feuille de calcul. La méthode Recognize ajoute une paire clé-valeur à la collection de propriétés à clé de la balise active. La méthode appelle ensuite la méthode PersistTag pour reconnaître la balise active et enregistrer la nouvelle propriété de balise active. Pour tester l'exemple, tapez les mots anglais sales et organization dans différentes cellules du classeur, puis essayez les actions de la balise active. Une action affiche la valeur de propriété correspondante pour le terme reconnu, et l'autre action affiche l'espace de noms et la légende de la balise active.

Imports System
Imports System.Windows.Forms
Imports Microsoft.Office.Interop.SmartTag
Imports Microsoft.Office.Tools.Excel

Public Class CustomSmartTag
    Implements ISmartTagExtension

    ' Declare the smart tag.
    Private smartTagDemo As Microsoft.Office.Tools.Excel.SmartTag

    ' Declare actions for this smart tag.
    WithEvents Action1 As Microsoft.Office.Tools.Excel.Action
    WithEvents Action2 As Microsoft.Office.Tools.Excel.Action

    Public Sub New()
        Me.smartTagDemo = Globals.Factory.CreateSmartTag(
            "https://www.contoso.com/Demo#DemoSmartTag", "Custom Smart Tag", Me)

        Action1 = Globals.Factory.CreateAction("Display property value")
        Action2 = Globals.Factory.CreateAction("Display smart tag details")

        smartTagDemo.Terms.AddRange(New String() {"sales", "organization"})
        smartTagDemo.Actions = New Microsoft.Office.Tools.Excel.Action() {Action1, Action2}
    End Sub

    Private Sub Recognize(ByVal text As String, 
        ByVal site As ISmartTagRecognizerSite, ByVal tokenList As ISmartTagTokenList, 
        ByVal context As SmartTagRecognizeContext) Implements ISmartTagExtension.Recognize

        ' Determine whether each smart tag term exists in the document text.
        Dim Term As String
        For Each Term In smartTagDemo.Terms

            ' Search the cell text for the first instance of 
            ' the current smart tag term.
            Dim index As Integer = context.CellText.IndexOf(Term, 0)

            If (index >= 0) Then

                ' Create a smart tag token and a property bag for the 
                ' recognized term.
                Dim propertyBag As ISmartTagProperties = site.GetNewPropertyBag()

                ' Write a new property value.
                Dim key As String = "Key1"
                propertyBag.Write(key, DateTime.Now)

                ' Attach the smart tag to the term in the document.
                context.PersistTag(propertyBag)

                ' This implementation only finds the first instance
                ' of a smart tag term in the cell. 
                Exit For
            End If
        Next
    End Sub

    ' This action displays the property value for the term.
    Private Sub Action1_Click(ByVal sender As Object,
        ByVal e As Microsoft.Office.Tools.Excel.ActionEventArgs) Handles Action1.Click

        Dim propertyBag As ISmartTagProperties = e.Properties
        Dim key As String = "Key1"
        MessageBox.Show("The corresponding value of " & key & " is: " &
            propertyBag.Read(key))
    End Sub

    ' This action displays smart tag details.
    Private Sub Action2_Click(ByVal sender As Object,
        ByVal e As Microsoft.Office.Tools.Excel.ActionEventArgs) Handles Action2.Click
        MessageBox.Show("The current smart tag caption is '" &
        smartTagDemo.Caption & "'. The current smart tag type is '" &
        smartTagDemo.SmartTagType & "'.")
    End Sub

    Public ReadOnly Property Base() As Microsoft.Office.Tools.Excel.SmartTag
        Get
            Return smartTagDemo
        End Get
    End Property

    Public ReadOnly Property ExtensionBase() As Object Implements ISmartTagExtension.ExtensionBase
        Get
            Return smartTagDemo
        End Get
    End Property
End Class
using System;
using System.Windows.Forms;
using Microsoft.Office.Interop.SmartTag;
using Microsoft.Office.Tools.Excel;

namespace Trin_ExcelDerivedSmartTags4
{
    class CustomSmartTag : ISmartTagExtension
    {
        // Declare the smart tag.
        Microsoft.Office.Tools.Excel.SmartTag smartTagDemo;

        // Declare actions for this smart tag.
        private Microsoft.Office.Tools.Excel.Action Action1;
        private Microsoft.Office.Tools.Excel.Action Action2;

        public CustomSmartTag()
        {
            this.smartTagDemo = Globals.Factory.CreateSmartTag(
                "https://www.contoso.com/Demo#DemoSmartTag", "Custom Smart Tag", this);

            Action1 = Globals.Factory.CreateAction("Display property value");
            Action2 = Globals.Factory.CreateAction("Display smart tag details");

            smartTagDemo.Terms.AddRange(new string[] { "sales", "organization" });
            smartTagDemo.Actions = new Microsoft.Office.Tools.Excel.Action[] { 
                Action1, Action2 };

            Action1.Click += new ActionClickEventHandler(Action1_Click);
            Action2.Click += new ActionClickEventHandler(Action2_Click);
        }

        void ISmartTagExtension.Recognize(string text, ISmartTagRecognizerSite site, 
            ISmartTagTokenList tokenList, SmartTagRecognizeContext context)
        {

            // Determine whether each smart tag term exists in the document text.
            foreach (string term in smartTagDemo.Terms)
            {
                // Search the cell text for the first instance of the current smart tag term.
                int index = context.CellText.IndexOf(term, 0);

                if (index >= 0)
                {
                    // Create a smart tag token and a property bag for the recognized term.
                    ISmartTagProperties propertyBag = site.GetNewPropertyBag();

                    // Write a new property value.                 
                    string key = "Key1";
                    propertyBag.Write(key, DateTime.Now.ToString());

                    // Attach the smart tag to the term in the document
                    context.PersistTag(propertyBag);

                    // This implementation only finds the first instance of a 
                    // smart tag term in the cell. 
                    break;
                }
            }
        }

        // This action displays the property value for the term.
        private void Action1_Click(object sender,
            Microsoft.Office.Tools.Excel.ActionEventArgs e)
        {
            ISmartTagProperties propertyBag = e.Properties;
            string key = "Key1";
            MessageBox.Show("The corresponding value of " + key +
                " is: " + propertyBag.get_Read(key));
        }

        // This action displays smart tag details.
        private void Action2_Click(object sender,
            Microsoft.Office.Tools.Excel.ActionEventArgs e)
        {
            MessageBox.Show("The current smart tag caption is '" +
                smartTagDemo.Caption + "'. The current smart tag type is '" +
                smartTagDemo.SmartTagType + "'.");
        }

        public Microsoft.Office.Tools.Excel.SmartTag Base
        {
            get { return smartTagDemo; }
        }

        public object ExtensionBase
        {
            get { return smartTagDemo; }
        }
    }

Compilation du code

  • Ajoutez une référence dans le projet à Bibliothèque de types Microsoft Smart Tags 2.0 de l'onglet COM de la boîte de dialogue Ajouter une référence. Vérifiez que la propriété Copie locale de la référence a la valeur false. Si la valeur est true, la référence n'est pas l'assembly PIA (Primary Interop Assembly) correct et vous devez installer l'assembly à partir du média d'installation Microsoft Office. Pour plus d'informations, consultez Comment : installer les assemblys PIA (Primary Interop Assembly) d'Office.

  • Placez l'exemple de code dans un nouveau fichier de classe appelé CustomSmartTag.

  • En C#, modifiez l'espace de noms pour faire correspondre le nom du projet.

  • Ajoutez des instructions Imports (en Visual Basic) ou using (en C#) pour les espaces de noms Microsoft.Office.Tools.Excel et Microsoft.Office.Interop.SmartTag en haut du fichier de classe.

  • Ajoutez le code suivant au gestionnaire d'événements ThisWorkbook_Startup ou ThisAddIn_Startup de votre projet. Ce code ajoute la balise active personnalisée au classeur.

    Me.VstoSmartTags.Add(New CustomSmartTag().Base)
    
    this.VstoSmartTags.Add(new CustomSmartTag().Base);
    

Sécurité

Vous devez activer les balises actives dans Excel. Par défaut, elles sont désactivées. Pour plus d'informations, consultez Comment : activer des balises actives dans Word et Excel.

Voir aussi

Tâches

Comment : activer des balises actives dans Word et Excel

Comment : ajouter des balises actives à des documents Word

Comment : ajouter des balises actives aux classeurs Excel

Comment : créer des balises actives avec des modules de reconnaissance personnalisés dans Word et dans .NET Framework 3.5

Procédure pas à pas : création d'une balise active à l'aide d'une personnalisation au niveau du document

Procédure pas à pas : création d'une balise active à l'aide d'un complément d'application

Concepts

Architecture des balises actives

Autres ressources

Vue d'ensemble des balises actives

Personnalisation de l'interface utilisateur Office