Share via


智慧標籤架構

Visual Studio 2010 中的 Office 開發工具提供彈性的智慧標籤物件模型,可以讓您快速將智慧標籤加入至 Microsoft Office Word 文件和 Microsoft Office Excel 活頁簿。 若要進一步應用,您還可以建立自己的智慧標籤辨識器,並存取智慧標籤中儲存的資料。

如需智慧標籤的詳細資訊,請參閱智慧標籤概觀

**適用於:**本主題中的資訊適用於 Excel 2007 和 Word 2007 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

物件模型概觀

智慧標籤物件模型將智慧標籤與智慧標籤所執行的動作區隔開來。 下列各節說明用來建立智慧標籤的主要物件。 如需示範如何在文件中加入智慧標籤的程式碼範例,請參閱 HOW TO:將置智慧標籤加入至 Word 文件HOW TO:在 Excel 活頁簿中加入智慧標籤

智慧標籤

在您的程式碼中,智慧標籤是 Microsoft.Office.Tools.Word.SmartTagMicrosoft.Office.Tools.Excel.SmartTag 物件。 這些物件包含下列屬性:

  • TermsExpressions: 這些屬性包含智慧標籤可辨識的詞彙。 若要指定簡單字串,請將字串加入至 Terms 屬性。 若要指定複雜字串,請將描述該字串的規則運算式 (Regular Expression) 加入至 Expressions 屬性。

  • Actions. 這個屬性包含要在使用者選取智慧標籤時執行的動作。

  • Caption. 這個屬性指定智慧標籤 (Tag) 的標籤 (Label)。

動作

當使用者選取智慧標籤時,便可以執行該智慧標籤專屬的一個或多個動作。 每個動作都以 Microsoft.Office.Tools.Word.ActionMicrosoft.Office.Tools.Excel.Action 物件表示。 這些物件提供 BeforeCaptionShow 和 Click 事件:

  • BeforeCaptionShow 事件會在使用者按一下智慧標籤圖示之後即引發,但這是在智慧標籤功能表顯示之前發生的。 如果您想要在執行階段修改智慧標籤功能表中的動作標題,請處理這個事件。

  • Click 事件會在使用者按一下智慧標籤功能表中的動作標題時引發。 若要在使用者按一下動作時執行程式碼,請處理這個事件。

這些事件的事件處理常式會接收 Microsoft.Office.Tools.Excel.ActionEventArgsMicrosoft.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);

如需進一步指示和示範較複雜智慧標籤的程式碼範例,請參閱 HOW TO:將置智慧標籤加入至 Word 文件HOW TO:在 Excel 活頁簿中加入智慧標籤

建立智慧標籤辨識器

如果您想要自訂預設智慧標籤辨識行為,可以建立您自己的智慧標籤辨識器。 做法取決於專案的目標是 .NET Framework 3.5 還是 .NET Framework 4。

預設文字辨識行為

當使用者在文件或活頁簿中輸入文字時,Word 和 Excel 就會從該文字建立一份語彙基元 (Token) 的清單。 預設智慧標籤辨識器會收到這份語彙基元清單,以及使用者輸入的完整文字。 如果符合下列其中一項條件,預設辨識器就會識別智慧標籤:

  • Terms 屬性的其中一個字串符合文件或活頁簿的其中一個語彙基元。

  • Expressions 屬性的其中一個規則運算式與使用者輸入的完整文字相符。

當使用者輸入字串時,Word 和 Excel 便會將含有內嵌空格的字串或是結合字母、數字和符號的字串剖析成個別的語彙基元。 例如,如果使用者輸入 "sales report",Word 和 Excel 就會建立語彙基元 "sales" 和 "report"。 同樣地,如果使用者輸入 "2005sales",Word 和 Excel 就會建立語彙基元 "2005" 和 "sales"。

如果您想要讓智慧標籤辨認含有內嵌空格的字串或是結合字母、數字和符號的字串,請勿將該字串加入至 Terms 屬性。 請改將描述該字串的規則運算式加入至 Expressions 屬性,或是自行建立搜尋該字串的辨識器。

在目標為 .NET Framework 4 的專案中建立智慧標籤辨識器

若要建立您自己的智慧標籤辨識器,請定義實作了 Microsoft.Office.Tools.Word.ISmartTagExtensionMicrosoft.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; }
    }
}

如需進一步指示,和示範使用自訂辨識器建立較複雜智慧標籤類別的程式碼範例,請參閱 HOW TO:使用 Word 中的自訂辨識器和 .NET Framework 4 建立智慧標籤HOW TO:使用 Excel 中的自訂辨識器和 .NET Framework 4 建立智慧標籤

在目標為 .NET Framework 3.5 的專案中建立智慧標籤辨識器

若要建立您自己的智慧標籤辨識器,請從 Microsoft.Office.Tools.Word.SmartTagMicrosoft.Office.Tools.Excel.SmartTag 衍生類別,然後覆寫該類別中的 SmartTag.Recognize 方法。 請讓這個方法搜尋文字中的智慧標籤詞彙,並在找到智慧標籤詞彙時,於 Word 或 Excel 中註冊智慧標籤。 若要註冊智慧標籤,請呼叫由您的類別從 Microsoft.Office.Tools.Word.SmartTagMicrosoft.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);
        }
    }
}

如需進一步指示,和示範使用自訂辨識器建立較複雜智慧標籤類別的程式碼範例,請參閱 HOW TO:使用 Word 中的自訂辨識器和 .NET Framework 3.5 建立智慧標籤HOW TO:在 Excel 和 .NET Framework 3.5 中使用自訂辨識器建立智慧標籤

在屬性包中儲存和擷取資料

智慧標籤可在索引鍵與值配對的集合 (稱為屬性包) 中儲存資料。 屬性包中的每個值與索引鍵都是字串。

有兩種方法可以存取屬性包:

  • 您可以處理 Microsoft.Office.Tools.Word.ActionMicrosoft.Office.Tools.Excel.Action 物件的 Click 或 BeforeCaptionShow 事件,並使用事件引數參數的 Properties 屬性,以寫入和讀取智慧標籤的屬性包。 Properties 屬性會傳回 ISmartTagProperties 物件。 當您在專案中加入 Microsoft Smart Tags 2.0 Type Library 的參考時,即可使用 ISmartTagProperties 介面。

  • 您可以依照上面的指示來建立自訂智慧標籤辨識器。 實作或覆寫 Recognize 方法時,請使用 site 參數的 GetNewPropertyBag 方法取得 ISmartTagProperties 物件,這個物件可用來寫入和讀取智慧標籤屬性包。

如需如何寫入和讀取屬性包的範例,請參閱下列主題:

規則運算式和屬性包

當您將規則運算式指派給智慧標籤時,預設辨識器會針對每個從規則運算式擷取的群組,在智慧標籤屬性包中加入一對索引鍵值組。

如需示範這個行為的範例,請參閱逐步解說:使用文件層級自訂建立智慧標籤。 如需規則運算式中所擷取群組的詳細資訊,請參閱群組建構規則運算式物件模型

請參閱

工作

HOW TO:在 Word 和 Excel 中啟用智慧標籤

HOW TO:將置智慧標籤加入至 Word 文件

HOW TO:在 Excel 活頁簿中加入智慧標籤

HOW TO:使用 Word 中的自訂辨識器和 .NET Framework 3.5 建立智慧標籤

HOW TO:在 Excel 和 .NET Framework 3.5 中使用自訂辨識器建立智慧標籤

逐步解說:使用文件層級自訂建立智慧標籤

逐步解說:使用應用程式層級增益集建立智慧標籤

其他資源

智慧標籤概觀