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

Visual Studio 2010 の Office 開発ツールには、柔軟性に優れたスマート タグ オブジェクト モデルが用意されており、Microsoft Office Word 文書や Microsoft Office Excel ブックに迅速にスマート タグを追加できます。 高度なシナリオでは、独自のスマート タグ レコグナイザーを作成したり、スマート タグに格納されているデータにアクセスしたりすることもできます。

スマート タグの詳細については、「スマート タグの概要」を参照してください。

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

オブジェクト モデルの概要

スマート タグのオブジェクト モデルでは、スマート タグと、スマート タグで実行するアクションが区別されています。 以下のセクションでは、スマート タグの作成に使用する主なオブジェクトについて説明します。 スマート タグをドキュメントに追加する方法を示すコード例については、「方法 : Word 文書にスマート タグを追加する」および「方法 : Excel ブックにスマート タグを追加する」を参照してください。

スマート タグ

コードでは、スマート タグは Microsoft.Office.Tools.Word.SmartTag オブジェクトまたは Microsoft.Office.Tools.Excel.SmartTag オブジェクトによって表されます。 これらのオブジェクトには、次のプロパティが含まれます。

  • Terms および Expressions。 これらのプロパティには、スマート タグの認識できる項目が含まれています。 単純な文字列を指定するには、Terms プロパティに文字列を追加します。 複雑な文字列を指定するには、文字列を表す正規表現を Expressions プロパティに追加します。

  • Actions. このプロパティには、ユーザーがスマート タグを選択したときに実行するアクションが含まれています。

  • Caption. このプロパティはスマート タグのラベルを指定します。

アクション

ユーザーがスマート タグを選択すると、ユーザーは、そのスマート タグに固有の 1 つまたは複数のアクションを実行できます。 各アクションは、Microsoft.Office.Tools.Word.Action オブジェクトまたは Microsoft.Office.Tools.Excel.Action オブジェクトで表されます。 これらのオブジェクトには、BeforeCaptionShow イベントと Click イベントがあります。

  • BeforeCaptionShow イベントは、ユーザーがスマート タグ アイコンをクリックした直後、スマート タグ メニューが表示される前に発生します。 実行時にスマート タグ メニューのアクションのタイトルを変更する場合は、このイベントを処理します。

  • Click イベントは、ユーザーがスマート タグ メニューに表示されるアクションのタイトルをクリックしたときに発生します。 ユーザーがアクションをクリックしたときにコードを実行するには、このイベントを処理します。

これらのイベントのイベント ハンドラーは、認識されたテキストおよびテキストの場所にアクセスできるようにする Microsoft.Office.Tools.Excel.ActionEventArgs オブジェクトまたは Microsoft.Office.Tools.Word.ActionEventArgs オブジェクトを受け取ります。

スマート タグの作成

スマート タグを作成する方法は、プロジェクトが .NET Framework 3.5 と .NET Framework 4 のどちらを対象としているかによって異なります。

.NET Framework 3.5 を対象としている場合は、SmartTag クラスおよび Action クラスを直接インスタンス化できます。 次のコード例は、.NET Framework 3.5 を対象とする Word プロジェクトで簡単なスマート タグを作成する方法を示しています。 このコード例を使用するには、ThisDocument クラス (ドキュメント レベルのプロジェクトの場合) または ThisAddIn クラス (アプリケーション レベルのプロジェクトの場合) から実行します。

Dim simpleSmartTag As Microsoft.Office.Tools.Word.SmartTag =
        New Microsoft.Office.Tools.Word.SmartTag(
        "www.microsoft.com/Demo#DemoSmartTag",
        "Test Smart Tag")
Dim simpleAction As Microsoft.Office.Tools.Word.Action = 
    New Microsoft.Office.Tools.Word.Action("Test Action")

simpleSmartTag.Terms.Add("blue")
simpleSmartTag.Actions = New Microsoft.Office.Tools.Word.Action() { _
    simpleAction}
Me.VstoSmartTags.Add(simpleSmartTag)
Microsoft.Office.Tools.Word.SmartTag simpleSmartTag =
    new Microsoft.Office.Tools.Word.SmartTag(
    "www.microsoft.com/Demo#DemoSmartTag",
    "Test Smart Tag");
Microsoft.Office.Tools.Word.Action simpleAction = 
    new Microsoft.Office.Tools.Word.Action("Test Action");

simpleSmartTag.Terms.Add("blue");
simpleSmartTag.Actions = new Microsoft.Office.Tools.Word.Action[] { 
    simpleAction };
this.VstoSmartTags.Add(simpleSmartTag);

.NET Framework 4 を対象としている場合は、SmartTag および Action はインターフェイスであるため、直接インスタンス化できません。 代わりに、プロジェクトの Globals クラスに用意されている CreateSmartTag メソッドおよび CreateAction メソッドを使用して、これらのオブジェクトのインスタンスを取得する必要があります。 Globals クラスの詳細については、「Office プロジェクト内のオブジェクトへのグローバル アクセス」を参照してください。 次のコード例は、.NET Framework 4 を対象とする Word プロジェクトで簡単なスマート タグを作成する方法を示しています。 このコード例を使用するには、ThisDocument クラス (ドキュメント レベルのプロジェクトの場合) または ThisAddIn クラス (アプリケーション レベルのプロジェクトの場合) から実行します。

Dim simpleSmartTag As Microsoft.Office.Tools.Word.SmartTag =
    Globals.Factory.CreateSmartTag(
        "www.microsoft.com/Demo#DemoSmartTag",
        "Test Smart Tag")
Dim simpleAction As Microsoft.Office.Tools.Word.Action =
    Globals.Factory.CreateAction("Test Action")

simpleSmartTag.Terms.Add("blue")
simpleSmartTag.Actions = New Microsoft.Office.Tools.Word.Action() { _
    simpleAction}
Me.VstoSmartTags.Add(simpleSmartTag)
Microsoft.Office.Tools.Word.SmartTag simpleSmartTag =
    Globals.Factory.CreateSmartTag(
    "www.microsoft.com/Demo#DemoSmartTag",
    "Test Smart Tag");
Microsoft.Office.Tools.Word.Action simpleAction =
    Globals.Factory.CreateAction("Test Action");

simpleSmartTag.Terms.Add("blue");
simpleSmartTag.Actions = new Microsoft.Office.Tools.Word.Action[] { 
    simpleAction };
this.VstoSmartTags.Add(simpleSmartTag);

より複雑なスマート タグの作成手順およびそのコード例については、「方法 : Word 文書にスマート タグを追加する」および「方法 : Excel ブックにスマート タグを追加する」を参照してください。

スマート タグ レコグナイザーの作成

既定のスマート タグ認識動作をカスタマイズするには、独自のスマート タグ レコグナイザーを作成します。 その方法は、プロジェクトが .NET Framework 3.5 と .NET Framework 4 のどちらを対象としているかによって異なります。

既定のテキスト認識動作

ユーザーが文書またはブック内でテキストを入力すると、Word および Excel では、そのテキストからトークンの一覧が作成されます。 既定のスマート タグ レコグナイザーは、このトークンの一覧およびユーザーが入力した完全なテキストを受け取ります。 既定のレコグナイザーは、次のいずれかの条件が満たされる場合に、スマート タグを識別します。

  • Terms プロパティ内の文字列の 1 つが、文書やブック内のトークンのいずれかに正確に一致する。

  • Expressions プロパティ内の正規表現の 1 つが、ユーザーが入力した完全なテキストで一致する。

Word および Excel は、空白が埋め込まれている文字列、または文字、数字、および記号を組み合わせた文字列を、ユーザーの入力時に個別のトークンに解析します。 たとえば、ユーザーが「sales report」と入力した場合、Word および Excel では "sales" および "report" というトークンが作成されます。 同様に、「2005sales」と入力した場合、Word および Excel では "2005" および "sales" というトークンが作成されます。

空白が埋め込まれている文字列、または文字、数字、および記号を組み合わせた文字列をスマート タグに認識させる場合は、その文字列を Terms プロパティに追加しないでください。 代わりに、その文字列を表す正規表現を Expressions プロパティに追加するか、その文字列を検索する独自のレコグナイザーを作成します。

.NET Framework 4 を対象とするプロジェクトにおけるスマート タグ レコグナイザーの作成

独自のスマート タグ レコグナイザーを作成するには、Microsoft.Office.Tools.Word.ISmartTagExtension インターフェイスまたは Microsoft.Office.Tools.Excel.ISmartTagExtension インターフェイスを実装するクラスを定義します。 次に、ISmartTagExtension.Recognize メソッドの実装で、テキストからスマート タグ項目を検索し、スマート タグ項目が見つかったら Word または Excel にスマート タグを登録します。 スマート タグを登録するには、Recognize メソッドの context パラメーターの PersistTag メソッドを呼び出します。

次のコード例は、.NET Framework 4 を対象とする Word プロジェクトで、簡単なスマート タグ クラスとカスタムのレコグナイザーを作成する方法を示しています。

Public Class SmartTagWithCustomRecognizer
    Implements Microsoft.Office.Tools.Word.ISmartTagExtension

    Private theSmartTag As Microsoft.Office.Tools.Word.SmartTag

    Public Sub New()
        theSmartTag = Globals.Factory.CreateSmartTag("www.microsoft.com/Demo#DemoSmartTag",
            "Test Smart Tag", Me)
        Dim simpleAction As Microsoft.Office.Tools.Word.Action = Globals.Factory.CreateAction("Test Action")
        theSmartTag.Actions = New Microsoft.Office.Tools.Word.Action() {simpleAction}
    End Sub

    Private Sub Recognize(ByVal text As String,
        ByVal site As Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite,
        ByVal tokenList As Microsoft.Office.Interop.SmartTag.ISmartTagTokenList,
        ByVal context As Microsoft.Office.Tools.Word.SmartTagRecognizeContext) _
        Implements Microsoft.Office.Tools.Word.ISmartTagExtension.Recognize

        Dim index As Integer = text.IndexOf("blue")
        If index >= 0 Then
            context.PersistTag(index, 4, Nothing)
        End If
    End Sub

    Public ReadOnly Property ExtensionBase() As Object _
        Implements Microsoft.Office.Tools.Word.ISmartTagExtension.ExtensionBase
        Get
            Return theSmartTag
        End Get
    End Property
End Class
public class SmartTagWithCustomRecognizer : Microsoft.Office.Tools.Word.ISmartTagExtension
{
    private Microsoft.Office.Tools.Word.SmartTag theSmartTag;

    public SmartTagWithCustomRecognizer()
    {
        theSmartTag = Globals.Factory.CreateSmartTag("www.microsoft.com/Demo#DemoSmartTag", 
            "Test Smart Tag", this);
        Microsoft.Office.Tools.Word.Action simpleAction = Globals.Factory.CreateAction("Test Action");
        theSmartTag.Actions = new Microsoft.Office.Tools.Word.Action[] { simpleAction };
    }

    public void Recognize(string text, Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite site, 
        Microsoft.Office.Interop.SmartTag.ISmartTagTokenList tokenList,
        Microsoft.Office.Tools.Word.SmartTagRecognizeContext context)
    {
        int index = text.IndexOf("blue");
        if (index >= 0)
        {
            context.PersistTag(index, 4, null);
        }
    }

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

より複雑なスマート タグ クラスおよびカスタムのレコグナイザーの作成手順およびそのコード例については、「方法: Word および .NET Framework 4 でカスタム レコグナイザーを持つスマート タグを作成する」および「方法: Excel および .NET Framework 4 でカスタム レコグナイザーを持つスマート タグを作成する」を参照してください。

.NET Framework 3.5 を対象とするプロジェクトにおけるスマート タグ レコグナイザーの作成

独自のスマート タグ レコグナイザーを作成するには、Microsoft.Office.Tools.Word.SmartTag または Microsoft.Office.Tools.Excel.SmartTag からクラスを派生させ、そのクラスの SmartTag.Recognize メソッドをオーバーライドします。 メソッドでは、テキストからスマート タグ項目を検索し、スマート タグ項目が見つかったら Word または Excel にスマート タグを登録します。 スマート タグを登録するには、Microsoft.Office.Tools.Word.SmartTag または Microsoft.Office.Tools.Excel.SmartTag から継承した PersistTag メソッドを呼び出します。

次のコード例は、.NET Framework 3.5 を対象とする Word プロジェクトで、簡単なスマート タグ クラスとカスタムのレコグナイザーを作成する方法を示しています。

Public Class SmartTagWithCustomRecognizer 
    Inherits Microsoft.Office.Tools.Word.SmartTag

    Public Sub New()
    MyBase.New("https://www.contoso.com/Demo#DemoSmartTag", _
        "Test Smart Tag")
        Dim simpleAction As Microsoft.Office.Tools.Word.Action = _
            New Microsoft.Office.Tools.Word.Action("TestAction")
        Me.Actions = new Microsoft.Office.Tools.Word.Action() { simpleAction }
    End Sub

    Protected Overrides Sub Recognize(ByVal text As String, _
        ByVal site As Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite, _
        ByVal tokenList As Microsoft.Office.Interop.SmartTag.ISmartTagTokenList)

        Dim index As Integer = text.IndexOf("blue")
        If index >= 0 Then
            Me.PersistTag(index, 4, Nothing)
        End If
    End Sub
End Class
public class SmartTagWithCustomRecognizer : Microsoft.Office.Tools.Word.SmartTag
{
    public SmartTagWithCustomRecognizer() : base(
        "https://www.contoso.com/Demo#DemoSmartTag", 
        "Test Smart Tag")
    {
        Microsoft.Office.Tools.Word.Action simpleAction = 
            new Microsoft.Office.Tools.Word.Action("TestAction");
        this.Actions = new Microsoft.Office.Tools.Word.Action[] { simpleAction };
    }

    protected override void Recognize(string text, 
        Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite site, 
        Microsoft.Office.Interop.SmartTag.ISmartTagTokenList tokenList)
    {
        int index = text.IndexOf("blue");
        if (index >= 0)
        {
            this.PersistTag(index, 4, null);
        }
    }
}

より複雑なスマート タグ クラスおよびカスタムのレコグナイザーの作成手順およびそのコード例については、「方法: Word および .NET Framework 3.5 でカスタム レコグナイザーを持つスマート タグを作成する」および「方法: Excel および .NET Framework 3.5 でカスタム レコグナイザーを持つスマート タグを作成する」を参照してください。

プロパティ バッグ内のデータの格納と取得

スマート タグでは、キーと値の組み合わせのコレクションであるプロパティ バッグに、データを格納できます。 プロパティ バッグ内のそれぞれのキーと値の組み合わせは、1 つの文字列です。

プロパティ バッグにアクセスするには、次の 2 つの方法があります。

  • Microsoft.Office.Tools.Word.Action オブジェクトまたは Microsoft.Office.Tools.Excel.Action オブジェクトの Click イベントまたは BeforeCaptionShow イベントを処理し、イベント引数パラメーターの Properties プロパティを使用して、スマート タグのプロパティ バッグの情報を読み書きできます。 Properties プロパティは、ISmartTagProperties オブジェクトを返します。 ISmartTagProperties インターフェイスは、Microsoft Smart Tags 2.0 Type Library への参照をプロジェクトに追加している場合に使用できます。

  • 前に説明した手順でカスタムのスマート タグ レコグナイザーを作成します。 Recognize メソッドの実装またはオーバーライドで、site パラメーターの GetNewPropertyBag メソッドを使用して ISmartTagProperties オブジェクトを取得することにより、スマート タグのプロパティ バッグの情報を読み書きできます。

プロパティ バッグの情報を読み書きする方法を示す例については、次のトピックを参照してください。

正規表現とプロパティ バッグ

スマート タグに正規表現を割り当てると、既定のレコグナイザーは、正規表現でキャプチャされた各グループのキーと値の組み合わせをスマート タグのプロパティ バッグに追加します。

この動作の例については、「チュートリアル : ドキュメント レベルのカスタマイズを使用したスマート タグの作成」を参照してください。 正規表現でキャプチャされるグループの詳細については、「グループ化構成体」および「正規表現のオブジェクト モデル」を参照してください。

参照

処理手順

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

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

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

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

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

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

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

概念

スマート タグの概要