方法: Excel および .NET Framework 4 でカスタム レコグナイザーを持つスマート タグを作成する
.NET Framework 4 を対象とする Excel プロジェクトでは、ISmartTagExtension インターフェイスを実装することで、Excel がドキュメント内でスマート タグを認識する方法を制御できます。
スマート タグを実行するには、Word または Excel でスマート タグを有効にしておく必要があります。 詳細については、「方法 : Word および Excel でスマート タグを有効にする」を参照してください。
対象: このトピックの情報は、Excel 2007 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
カスタム レコグナイザーを持つスマート タグを Excel ブックに追加するには
Excel 2007 用のドキュメント レベルまたはアプリケーション レベルのプロジェクトを作成します。 詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
[参照の追加] ダイアログ ボックスの [.NET] タブで、Microsoft.Office.Interop.SmartTag アセンブリ (バージョン 12.0.0.0) への参照を追加します。
プロジェクトにクラス ファイルを追加し、ISmartTagExtension インターフェイスを実装するクラスを作成します。
新しいクラスで、スマート タグを表す SmartTag オブジェクトを作成し、スマート タグのアクションを表す 1 つ以上の Action オブジェクトを作成します。 Globals.Factory.CreateSmartTag メソッドおよび Globals.Factory.CreateAction メソッドを使用して、これらのオブジェクトを作成します。
Recognize メソッドを実装し、カスタム レコグナイザーの独自の動作を記述します。 実装では、Excel でスマート タグを認識させるために、context パラメーターの PersistTag メソッドを呼び出す必要があります。
ExtensionBase プロパティを実装して、SmartTag オブジェクトを返します。
作成したアクションの Click イベントに応答するイベント ハンドラーを作成します。必要に応じて、BeforeCaptionShow イベントのイベント ハンドラーも作成します。
プロジェクト ブックのコード ファイルで、スマート タグのインスタンスを ThisWorkbook クラスの VstoSmartTags プロパティ (ドキュメント レベルのプロジェクトの場合) または ThisAddIn クラスの VstoSmartTags プロパティ (アプリケーション レベルのプロジェクトの場合) に追加します。
使用例
Excel ブックにカスタム スマート タグを作成するコード例を次に示します。 この例では、Recognize メソッドを実装して、ワークシートのセル内で sales および organization という項目を認識するようにします。 Recognize メソッドは、スマート タグのキー付きプロパティのコレクションに、キーと値の組み合わせを追加します。 このメソッドは次に、スマート タグを認識して新しいスマート タグ プロパティを保存するために PersistTag メソッドを呼び出します。 この例をテストするには、ブックの別々のセルに「sales」および「organization」という単語を入力してから、スマート タグ アクションを実行します。 アクションの 1 つは認識された項目に対応するプロパティ値を表示し、もう 1 つのアクションはスマート タグの名前空間とキャプションを表示します。
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; }
}
}
コードのコンパイル
[参照の追加] ダイアログ ボックスの [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().Base)
this.VstoSmartTags.Add(new CustomSmartTag().Base);
セキュリティ
Excel でスマート タグを有効にする必要があります。 既定では有効になっていません。 詳細については、「方法 : Word および Excel でスマート タグを有効にする」を参照してください。
参照
処理手順
方法 : Word および Excel でスマート タグを有効にする
方法: Word および .NET Framework 3.5 でカスタム レコグナイザーを持つスマート タグを作成する
チュートリアル : ドキュメント レベルのカスタマイズを使用したスマート タグの作成
チュートリアル : アプリケーション レベルのアドインを使用したスマート タグの作成