演练:使用文档级自定义项创建智能标记

此演练演示如何在 Word 的文档级自定义项中创建智能标记。 此智能标记可识别华氏温度字符串。 该智能标记包括一项操作,可以将温度值转换为摄氏温度,并用已格式化的摄氏温度字符串替换所识别的文本。

**适用于:**本主题中的信息适用于 Word 2007 的文档级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

若要运行此智能标记,最终用户必须在 Word 中启用智能标记。 有关更多信息,请参见如何:在 Word 和 Excel 中启用智能标记

本演练阐释了以下任务:

  • 创建可识别正则表达式的智能标记。

  • 创建可从智能标记检索数据并修改所识别的智能标记文本的操作。

提示

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置

系统必备

您需要以下组件来完成本演练:

-

Visual Studio 2010 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.100\).md)。
  • Word 2007。

  • .NET Framework 3.5。

提示

如果面向 .NET Framework 4,则必须编写不同的代码以创建智能标记和操作。 有关更多信息,请参见智能标记的结构

创建新项目

第一步是创建 Word 文档项目。

创建新项目

Visual Studio 在设计器中打开新的 Word 文档,并将“我的智能标记”项目添加到**“解决方案资源管理器”**中。

配置项目

该项目需要引用智能标记 DLL,还需要使用正则表达式。

配置项目

  1. 在**“项目”菜单上,单击“添加引用”**。

  2. 在**“.NET”选项卡上,选择“Microsoft.Office.Interop.SmartTag”,然后单击“确定”**。 选择该程序集的 12.0.0.0 版。

  3. 在**“解决方案资源管理器”中,右击 ThisDocument.vb (Visual Basic) 或 ThisDocument.cs (C#),然后单击“查看代码”**。

  4. 将以下代码行添加到文件顶部。

    Imports System.Text.RegularExpressions
    
    using System.Text.RegularExpressions;
    

创建智能标记

为了使智能标记能够找到并转换华氏温度字符串,请向智能标记识别的术语列表中添加一个正则表达式,并创建一项在用户单击智能标记时可以使用的操作。

创建智能标记

  1. 使用下面的代码替换 ThisDocument 类中的 ThisDocument_Startup 事件处理程序。 此代码创建一个表示智能标记的 SmartTag,并向智能标记识别的术语列表中添加一个正则表达式。

    WithEvents action1 As Microsoft.Office.Tools.Word.Action
    
    Private Sub ThisDocument_Startup(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Startup
    
        'Use the following line of code in projects that target the .NET Framework 4.
        Dim smartTag1 As Microsoft.Office.Tools.Word.SmartTag = _
            Globals.Factory.CreateSmartTag( _
           "www.microsoft.com/Demo#DemoSmartTag", _
           "Demonstration Smart Tag")
    
        'In projects that target the .NET Framework 3.5, use the following line of code.
        'Dim smartTag1 As New Microsoft.Office.Tools.Word.SmartTag( _
        '   "www.microsoft.com/Demo#DemoSmartTag", _
        '  "Demonstration Smart Tag")
    
        smartTag1.Expressions.Add( _
            New Regex("(?'number'[+-]?\b[0-9]+)?\s?(F|f)\b"))
    
    private Microsoft.Office.Tools.Word.Action action1;
    
    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
        // Use the following line of code in projects that target the .NET Framework 4.
        Microsoft.Office.Tools.Word.SmartTag smartTag1 =
            Globals.Factory.CreateSmartTag(
            "www.microsoft.com/Demo#DemoSmartTag",
            "Demonstration Smart Tag");
    
        // In projects that target the .NET Framework 3.5, use the following line of code.
        //Microsoft.Office.Tools.Word.SmartTag smartTag1 =
        //  new Microsoft.Office.Tools.Word.SmartTag(
        //  "www.microsoft.com/Demo#DemoSmartTag",
        //  "Demonstration Smart Tag");
    
        smartTag1.Expressions.Add(new Regex(
            @"(?'number'[+-]?\b[0-9]+)�?\s?(F|f)\b"));
    
  2. 创建一个新的 Action,并将其添加到智能标记的 Actions 属性。 Action 表示用户可在智能标记菜单上,单击的项。

    'Use the following line of code in projects that target the .NET Framework 4.
    action1 = Globals.Factory.CreateAction( _
        "Convert to Celsius")
    
    'In projects that target the .NET Framework 3.5, use the following line of code.
    'action1 = New Microsoft.Office.Tools.Word.Action( _
    '    "Convert to Celsius")
    
    smartTag1.Actions = _
        New Microsoft.Office.Tools.Word.Action() {action1}
    
    
    // Use the following line of code in projects that target the .NET Framework 4.
    action1 = Globals.Factory.CreateAction(
        "Convert to Celsius");
    
    // In projects that target the .NET Framework 3.5, use the following line of code.
    //action1 = new Microsoft.Office.Tools.Word.Action(
    //    "Convert to Celsius");
    
    
    
    smartTag1.Actions = new
        Microsoft.Office.Tools.Word.Action[] {action1};
    
  3. 通过将 SmartTag 添加到 VstoSmartTags 属性,将智能标记附加到文档。 在 C# 中,向操作的 Click 事件附加事件处理程序。

        Me.VstoSmartTags.Add(smartTag1)
    End Sub
    
        this.VstoSmartTags.Add(smartTag1);
    
        action1.Click += new
            Microsoft.Office.Tools.Word.ActionClickEventHandler(
            action1_Click);
    }
    

为操作创建事件处理程序

事件处理程序从智能标记属性包内的键 number 中检索华氏温度值。 然后事件处理程序将华氏温度值转换为摄氏温度,并替换识别的字符串。

在本示例中,键 number 标识通过为智能标记分配的正则表达式捕获的组。 有关智能标记中的属性包和正则表达式的更多信息,请参见智能标记的结构

创建事件处理程序

  • 将下面的代码复制到 ThisDocument 类中。

    Private Sub action1_Click(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ActionEventArgs) _
        Handles action1.Click
    
        Dim value As String = e.Properties.Read("number")
        Dim fahrenheit As Double = System.Convert.ToDouble(value)
        Dim celsius As Integer = Fix(fahrenheit - 32) * 5 / 9
        e.Range.Text = celsius.ToString() + "C"
    End Sub
    
    void action1_Click(object sender,
        Microsoft.Office.Tools.Word.ActionEventArgs e)
    {
        string value = e.Properties.get_Read("number");
        double fahrenheit = System.Convert.ToDouble(value);
        int celsius = (int)(fahrenheit - 32) * 5 / 9;
        e.Range.Text = celsius.ToString() + "�C";
    }
    

测试应用程序

现在可以测试文档,以确保智能标记将华氏温度转换为摄氏温度。

测试工作簿

  1. 在 Word 中,启用智能标记。

    有关更多信息,请参见如何:在 Word 和 Excel 中启用智能标记

  2. 按 F5 运行项目。

  3. 键入符合向智能标记添加的正则表达式的字符串,例如 60F、60° F 或 60 F。

    提示

    若要键入度数符号 (°),请按住 Alt 并键入 248。

  4. 单击出现在识别的字符串上方的智能标记图标,然后单击**“Convert to Celsius”**。

  5. 确认原始字符串已替换为包含摄氏温度的新字符串。

请参见

任务

如何:在 Word 和 Excel 中启用智能标记

如何:向 Word 文档添加智能标记

如何:向 Excel 工作簿添加智能标记

如何:在 Word 和 .NET Framework 3.5 中使用自定义识别器创建智能标记

如何:在 Excel 和 .NET Framework 3.5 中使用自定义识别器创建智能标记

演练:使用应用程序级外接程序创建智能标记

概念

智能标记的结构

其他资源

智能标记概述