次の方法で共有


方法: Excel および .NET Framework 3.5 でカスタム レコグナイザーを持つスマート タグを作成する

.NET Framework 3.5 を対象とする Excel プロジェクトでは、Microsoft.Office.Tools.Excel.SmartTag クラスから派生し、Recognize メソッドをオーバーライドすることによって、Excel がドキュメント内でスマート タグを認識する方法を制御できます。

スマート タグを実行するには、スマート タグを有効にしておく必要があります。 詳細については、「方法 : Word および Excel でスマート タグを有効にする」を参照してください。

対象: このトピックの情報は、Excel 2007 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

カスタム レコグナイザーを持つスマート タグを Excel ブックに追加するには

  1. Excel 2007 用のドキュメント レベルまたはアプリケーション レベルのプロジェクトを新しく作成します。 詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。

  2. [参照の追加] ダイアログ ボックスの [.NET] タブで、Microsoft.Office.Interop.SmartTag アセンブリ (バージョン 12.0.0.0) への参照を追加します。

  3. プロジェクトにクラス ファイルを追加し、Microsoft.Office.Tools.Excel.SmartTag から継承するクラスを作成します。

  4. 新しいクラスで、スマート タグのアクションを作成します。 アクションとは、スマート タグ メニューに表示される項目です。 作成したクラスの Actions コレクションに Action 型のインスタンスを追加することで、アクションを作成します。

  5. SmartTagBase.Recognize メソッドをオーバーライドして、カスタム レコグナイザーの独自の動作を実装します。

    Recognize メソッドのオーバーライドでは、Excel でスマート タグを認識させるために Microsoft.Office.Tools.Excel.SmartTag.PersistTag メソッドを呼び出す必要があります。

  6. 作成したアクションの Click イベントに応答するイベント ハンドラーを作成します。必要に応じて、BeforeCaptionShow イベントのイベント ハンドラーも作成します。

  7. プロジェクト ブックのコード ファイルで、スマート タグのインスタンスを ThisWorkbook クラスの VstoSmartTags プロパティ (ドキュメント レベルのプロジェクトの場合) または ThisAddIn クラスの VstoSmartTags プロパティ (アプリケーション レベルのプロジェクトの場合) に追加します。

使用例

Excel ブックにカスタム スマート タグを作成するコード例を次に示します。 この例では、Recognize メソッドをオーバーライドして、sales および organization という項目を認識するようにします。 Recognize メソッドは、スマート タグのキー付きプロパティのコレクションに、キーと値の組み合わせを追加します。 このメソッドは次に、スマート タグを認識して新しいスマート タグ プロパティを保存するために PersistTag メソッドを呼び出します。

この例をテストするには、ブックの別々のセルに「sales」および「organization」という単語を入力してから、スマート タグ アクションを実行します。 アクションの 1 つは認識された項目に対応するプロパティ値を表示し、もう 1 つのアクションはスマート タグの名前空間とキャプションを表示します。

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 + "'.");
        }
    }

コードのコンパイル

  • [参照の追加] ダイアログ ボックスの [COM] タブで、プロジェクトの [Microsoft Smart Tags 2.0 Type Library] への参照を追加します。 参照の ローカル コピー プロパティが false に設定されていることを確認します。 このプロパティが true の場合、この参照は正しいプライマリ相互運用機能アセンブリではないので、Microsoft Office インストール メディアから正しいアセンブリをインストールする必要があります。 詳細については、「方法 : Office のプライマリ相互運用機能アセンブリをインストールする」を参照してください。

  • CustomSmartTag という名前の新しいクラス ファイルにコード例を記述します。

  • C# では、プロジェクト名と一致するように名前空間を変更します。

  • クラス ファイルの先頭に、Microsoft.Office.Tools.Excel 名前空間および Microsoft.Office.Interop.SmartTag 名前空間に対する Imports ステートメント (Visual Basic の場合) または using ステートメント (C# の場合) を追加します。

  • プロジェクトの ThisWorkbook_Startup イベント ハンドラーまたは ThisAddIn_Startup イベント ハンドラーに、次のコードを追加します。 このコードは、ブックにカスタム スマート タグを追加します。

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

セキュリティ

Excel でスマート タグを有効にする必要があります。 既定では有効になっていません。 詳細については、「方法 : Word および Excel でスマート タグを有効にする」を参照してください。

参照

処理手順

方法 : Word および Excel でスマート タグを有効にする

方法 : Word 文書にスマート タグを追加する

方法 : Excel ブックにスマート タグを追加する

方法: Word および .NET Framework 3.5 でカスタム レコグナイザーを持つスマート タグを作成する

チュートリアル : ドキュメント レベルのカスタマイズを使用したスマート タグの作成

チュートリアル : アプリケーション レベルのアドインを使用したスマート タグの作成

概念

スマート タグの概要

スマート タグのアーキテクチャ

Office UI のカスタマイズ