演练:使用文档级自定义项创建智能标记
此演练演示如何在 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 Basic 或 C# 创建名为“我的智能标记”的 Word 2007 文档项目。 在向导中,选择**“创建新文档”**。
有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目。
Visual Studio 在设计器中打开新的 Word 文档,并将“我的智能标记”项目添加到**“解决方案资源管理器”**中。
配置项目
该项目需要引用智能标记 DLL,还需要使用正则表达式。
配置项目
在**“项目”菜单上,单击“添加引用”**。
在**“.NET”选项卡上,选择“Microsoft.Office.Interop.SmartTag”,然后单击“确定”**。 选择该程序集的 12.0.0.0 版。
在**“解决方案资源管理器”中,右击 ThisDocument.vb (Visual Basic) 或 ThisDocument.cs (C#),然后单击“查看代码”**。
将以下代码行添加到文件顶部。
Imports System.Text.RegularExpressions
using System.Text.RegularExpressions;
创建智能标记
为了使智能标记能够找到并转换华氏温度字符串,请向智能标记识别的术语列表中添加一个正则表达式,并创建一项在用户单击智能标记时可以使用的操作。
创建智能标记
使用下面的代码替换 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"));
创建一个新的 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};
通过将 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"; }
测试应用程序
现在可以测试文档,以确保智能标记将华氏温度转换为摄氏温度。
测试工作簿
在 Word 中,启用智能标记。
有关更多信息,请参见如何:在 Word 和 Excel 中启用智能标记。
按 F5 运行项目。
键入符合向智能标记添加的正则表达式的字符串,例如 60F、60° F 或 60 F。
提示
若要键入度数符号 (°),请按住 Alt 并键入 248。
单击出现在识别的字符串上方的智能标记图标,然后单击**“Convert to Celsius”**。
确认原始字符串已替换为包含摄氏温度的新字符串。
请参见
任务
如何:在 Word 和 .NET Framework 3.5 中使用自定义识别器创建智能标记
如何:在 Excel 和 .NET Framework 3.5 中使用自定义识别器创建智能标记