共用方式為


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

在目標為 .NET Framework 4 的 Word 專案中,您可以實作 ISmartTagExtension 介面,藉以控制 Word 如何辨識文件中的智慧標籤。

若要執行智慧標籤,使用者必須在 Word 或 Excel 中啟用智慧標籤。 如需詳細資訊,請參閱 HOW TO:在 Word 和 Excel 中啟用智慧標籤

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

若要將智慧標籤及自訂辨識器加入至 Word 文件

  1. 建立 Word 2007 的文件層級或應用程式層級專案。 如需詳細資訊,請參閱 HOW TO:在 Visual Studio 中建立 Office 專案

  2. 從 [加入參考] 對話方塊的 [.NET] 索引標籤,加入 Microsoft.Office.Interop.SmartTag 組件 (版本 12.0.0.0) 的參考。

  3. 將類別檔案加入至專案,並建立實作 ISmartTagExtension 介面的類別。

  4. 在新類別中,建立代表智慧標籤的 SmartTag 物件,並建立代表智慧標籤動作的一個或多個 Action 物件。 請使用 Globals.Factory.CreateSmartTagGlobals.Factory.CreateAction 方法建立這些物件。

  5. 實作 Recognize 方法,並撰寫您自己的自訂辨識行為。

    您的實作必須呼叫 context 參數的 PersistTag 方法,才能讓 Word 辨識智慧標籤。

  6. 實作 ExtensionBase 屬性,以傳回 SmartTag 物件。

  7. 建立事件處理常式,以回應您所建立動作的 Click 事件和 (選擇性) BeforeCaptionShow 事件。

  8. 在專案文件的程式碼檔案中,將智慧標籤執行個體加入至 ThisDocument 類別 (文件層級專案) 的 VstoSmartTags 屬性或 ThisAddIn 類別 (應用程式層級專案) 的 VstoSmartTags 屬性。

範例

在下列程式碼中,示範了如何在 Word 文件中建立自訂智慧標籤。 這個範例會實作 Recognize 方法,以辨識 sales 和 organization 這兩個詞彙。 Recognize 方法會將一對索引鍵與值加入至智慧標籤中設為索引鍵的屬性集合中。 然後方法會呼叫 PersistTag 方法,以辨識智慧標籤並儲存新的智慧標籤屬性。

若要測試這段程式碼,請在文件的不同位置輸入文字 sales 和 organization,然後嘗試執行智慧標籤的動作。 其中一個動作會顯示所辨識詞彙的對應屬性值,另一個動作則會顯示智慧標籤的命名空間 (Namespace) 和標題。

Imports System
Imports System.Windows.Forms
Imports Microsoft.Office.Interop.SmartTag
Imports Microsoft.Office.Tools.Word

Public Class CustomSmartTag
    Implements ISmartTagExtension
    ' Declare the smart tag.
    Private smartTagDemo As Microsoft.Office.Tools.Word.SmartTag

    ' Declare actions for this smart tag.
    WithEvents Action1 As Microsoft.Office.Tools.Word.Action
    WithEvents Action2 As Microsoft.Office.Tools.Word.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.Word.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

        For Each term As String In smartTagDemo.Terms
            ' Search the text for the current smart tag term.
            Dim index As Integer = text.IndexOf(term, 0)

            While (index >= 0)
                ' 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.ToString())

                ' Attach the smart tag to the term in the document
                context.PersistTag(index, term.Length, propertyBag)

                ' Increment the index and then find the next instance of the smart tag term.
                index += term.Length
                index = text.IndexOf(term, index)
            End While
        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.Word.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.Word.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.Word.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.Word;

namespace CustomSmartTagExample
{
    public class CustomSmartTag : ISmartTagExtension
    {
        // Declare the smart tag.
        Microsoft.Office.Tools.Word.SmartTag smartTagDemo;

        // Declare actions for this smart tag.
        private Microsoft.Office.Tools.Word.Action Action1;
        private Microsoft.Office.Tools.Word.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.Word.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)
        {

            foreach (string term in smartTagDemo.Terms)
            {
                // Search the text for the current smart tag term.
                int index = text.IndexOf(term, 0);

                while (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(index, term.Length, propertyBag);

                    // Increment the index and then find the next instance of the smart tag term.
                    index += term.Length;
                    index = text.IndexOf(term, index);
                }
            }
        }

        // This action displays the property value for the term.
        private void Action1_Click(object sender,
            Microsoft.Office.Tools.Word.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.Word.ActionEventArgs e)
        {
            MessageBox.Show("The current smart tag caption is '" +
                smartTagDemo.Caption + "'. The current smart tag type is '" + smartTagDemo.SmartTagType + "'.");
        }


        public Microsoft.Office.Tools.Word.SmartTag Base
        {
            get { return smartTagDemo; }
        }

        public object ExtensionBase
        {
            get { return smartTagDemo; }
        }

    }
}

編譯程式碼

  • 從 [加入參考] 對話方塊的 [COM] 索引標籤,將專案中的參考加入至 [Microsoft Smart Tags 2.0 Type Library]。 請確定參考的 [複製到本機] 屬性為 false。 如果為 true,參考將不會指向正確的主要 Interop 組件,而您就必須從 Microsoft Office 安裝媒體安裝該組件。 如需詳細資訊,請參閱 HOW TO:安裝 Office 主要 Interop 組件

  • 將範例程式碼放入名為 CustomSmartTag 的新類別檔案中。

  • 在 C# 中,變更命名空間,以符合專案名稱。

  • 在類別檔案頂端,加入 Imports (Visual Basic) 或 using (C#) 陳述式,以便使用 Microsoft.Office.Tools.WordMicrosoft.Office.Interop.SmartTag 命名空間。

  • 在專案的 ThisDocument_Startup 或 ThisAddIn_Startup 事件處理常式中加入下列程式碼。 這段程式碼會將自訂智慧標籤加入至文件。

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

安全性

若要執行智慧標籤,必須啟用 Word 中的智慧標籤。 如需詳細資訊,請參閱 HOW TO:在 Word 和 Excel 中啟用智慧標籤

請參閱

工作

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

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

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

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

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

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

概念

智慧標籤架構

其他資源

智慧標籤概觀