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

Dans les projets Excel qui ciblent .NET Framework 3.5, vous pouvez contrôler la manière dont Excel reconnaît les balises actives dans les documents en dérivant de la classe Microsoft.Office.Tools.Excel.SmartTag et en substituant la méthode Recognize.

Pour exécuter des balises actives, ces dernières doivent être activées. 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 hérite de Microsoft.Office.Tools.Excel.SmartTag.

  4. Dans la nouvelle classe, créez les actions pour les balises actives. Les actions sont des éléments qui apparaissent dans le menu Balise active. Créez des actions en ajoutant des instances du type Action à la collection Actions de votre classe.

  5. Substituez la méthode SmartTagBase.Recognize pour implémenter votre propre comportement de reconnaissance personnalisé.

    Votre substitution de la méthode Recognize doit appeler la méthode Microsoft.Office.Tools.Excel.SmartTag.PersistTag pour qu'Excel reconnaisse la balise active.

  6. 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.

  7. 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 substitue la méthode Recognize pour reconnaître les termes sales et organization. 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 Microsoft.Office.Tools.Excel
Imports Microsoft.Office.Interop.SmartTag

Public Class CustomSmartTag
    Inherits SmartTag

    ' Declare Actions for this SmartTag
    WithEvents Action1 As New Action("Display property value")
    WithEvents Action2 As New Action("Display smart tag details")

    Public Sub New()
        MyBase.New("https://www.contoso.com/Demo#DemoSmartTag", _
            "Custom Smart Tag")
        Me.Terms.AddRange(New String() {"sales", "organization"})
        Actions = New Action() {Action1, Action2}
    End Sub

    Protected Overrides Sub Recognize(ByVal text As String, _
        ByVal site As ISmartTagRecognizerSite, _
        ByVal tokenList As ISmartTagTokenList)

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

            ' Search the cell text for the first instance of 
            ' the current smart tag term.
            Dim index As Integer = Me.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
                Me.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 ActionEventArgs) Handles Action1.Click

        Dim propertyBag As ISmartTagProperties = e.Properties
        Dim key As String = "Key1"
        MsgBox("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 ActionEventArgs) Handles Action2.Click

        MsgBox("The current smart tag caption is '" & _
            Me.Caption & "'. The current smart tag type is '" & _
            Me.SmartTagType & "'.")
    End Sub
End Class
using System;
using System.Windows.Forms;
using Microsoft.Office.Tools.Excel;
using Microsoft.Office.Interop.SmartTag;

    public class CustomSmartTag : SmartTag {

        // Declare Actions for this SmartTag
        Microsoft.Office.Tools.Excel.Action Action1 =
            new Microsoft.Office.Tools.Excel.Action("Display property value");
        Microsoft.Office.Tools.Excel.Action Action2 =
            new Microsoft.Office.Tools.Excel.Action("Display smart tag details");

        public CustomSmartTag() : base(
            "https://www.contoso.com/Demo#DemoSmartTag", 
            "Custom Smart Tag")
        {
            this.Terms.AddRange(new string[] { 
                "sales", "organization" });
            Actions = new Microsoft.Office.Tools.Excel.Action[] { Action1, Action2 };
            Action1.Click +=
                new ActionClickEventHandler(Action1_Click);
            Action2.Click += 
                new ActionClickEventHandler(Action2_Click);
        }

        protected override void Recognize(string text, 
            ISmartTagRecognizerSite site, ISmartTagTokenList tokenList)
        {
            // Determine whether each smart tag term exists in 
            // the document text.
            foreach (string term in this.Terms)
            {
                // Search the cell text for the first instance of 
                // the current smart tag term.
                int index = this.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
                    this.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, 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, ActionEventArgs e)
        {
            MessageBox.Show("The current smart tag caption is '" + 
                this.Caption + "'. The current smart tag type is '" + 
                this.SmartTagType + "'.");
        }
    }

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())
    
    this.VstoSmartTags.Add(new CustomSmartTag());
    

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