Comment : créer des balises actives avec des modules de reconnaissance personnalisés dans Excel

Mise à jour : Juillet 2008

S'applique à

Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés.

Projets au niveau du document

  • Excel 2003

  • Excel 2007

  • Word 2003

  • Word 2007

Projets au niveau de l'application

  • Excel 2007

  • Word 2007

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

Vous pouvez déterminer la manière dont Microsoft Office Excel reconnaît les balises actives dans les classeurs par une dérivation de la classe Microsoft.Office.Tools.Excel.SmartTag et une substitution de la méthode Recognize.

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.

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. Pour plus d'informations, consultez Comment : créer des projets Visual Studio Tools pour Office.

    Remarque :

    Pour utiliser un projet au niveau de l'application, vous devez avoir préalablement installé Visual Studio 2008 Service Pack 1 (SP1).

  2. Ajoutez une référence à Bibliothèque de types Microsoft Smart Tags 2.0 de l'onglet COM 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 Recognize pour implémenter votre propre comportement de reconnaissance personnalisé. Votre implémentation de Recognize doit appeler la méthode 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).

    Remarque :

    Si vous utilisez un projet au niveau de l'application que vous avez créé avant d'installer le SP1, vous devez le modifier avant de pouvoir générer la propriété VstoSmartTags. Pour plus d'informations, consultez Comment : ajouter des balises actives d'application à des projets créés avant SP1.

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 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 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;

namespace Trin_ExcelDerivedSmartTags
{
    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

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

Vue d'ensemble des balises actives

Architecture des balises actives

Personnalisation de l'interface utilisateur Office

Historique des modifications

Date

Historique

Raison

Juillet 2008

Nouvelles informations ajoutées pour les compléments d'application.

Modifications de fonctionnalités dans le SP1.