分享
 
 
 

使用Word2003中的智能标记搜索收件箱数据

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

简介

无论是撰写电子邮件、信函还是其他文档,都没有任何一种程序能够与 Microsoft Office Word 2003 的能力相比。您可以访问强大的模板、样式、搜索服务等许多功能。智能标记使您可以基于在 Word 文档中键入的文本来采取操作,从而提供了更好的体验。例如,当您键入某个人的姓名时,Word 可以将其识别为人员姓名,并且允许您在自己的 Outlook 联系人中快速搜索该姓名,并从那里采取操作。

此功能非常适用于联系人。但是,如果是其他类型的内容,会怎样呢?使用 Outlook,您可以在 Exchange 邮件存储中存储任务、联系人、约会、便笺、电子邮件、公告等许多内容。能够标明文档中的字词并将它们连接到邮件存储中的上述其他内容类型的智能标记具有类似的价值,但不存在这样的内置智能标记。幸而,您可以十分轻松地开发此类智能标记。

注 本文假设读者了解智能标记的用法、相应的智能标记 API 以及开发智能标记的基本过程。有关开发智能标记的详细信息,请参阅 MSDN Office 开发人员中心上智能标记门户的 Getting Started 部分。

工作原理

该智能标记具有一个识别程序,该程序可以对 Word 中的文本输入进行计算,并确定键入的字词是否与预定义的搜索术语列表中的某个术语相匹配。您负责创建该术语列表,并将值存储在 XML 文件中。智能标记 DLL 在 Word 首次加载智能标记时读取此文件,并且将术语缓存在内存中。图 1 显示了包含术语列表的 XML 文件的内容。

图 1. 用于识别的术语列表

当 Word 发现键入的字词与列表中的某个术语相匹配时,就会为匹配的字词指定一个属性,从而将其标明为智能标记。图 2 显示了一个 Word 文档中的已识别术语。

图 2. 用智能标记标明的已识别术语

然后,您可以通过将光标悬停在所标明字词的上方来激活智能标记菜单。智能标记菜单显示了一个用于搜索邮箱的自定义项目(图 3)。

图 3. 已识别术语的智能标记操作菜单

单击该项目会使智能标记执行相应的代码,以便在 Exchange 邮件存储中搜索收件箱中在主题行上包含该搜索术语的电子邮件。智能标记在一个 Windows 窗体中显示结果,该窗体带有一个 DataGrid,其中列出了主题中包含该搜索术语的邮件项目(图 4)。

图 4. Windows窗体中的搜索结果

在此例中,DataGrid 仅显示电子邮件主题的字段以及发件人的信息。但是,它在幕后还检索其他电子邮件字段(如正文),尽管没有显示这些字段。通过简单地更改网格的属性,您可以显示这些隐藏字段。本文稍后将说明如何完成该操作。

该示例的最后一项功能是使您可以将所选电子邮件的主要文本插入到 Word 文档中。您可以通过将光标悬停在 DataGrid 中某行的上方并右键单击该项目来完成此操作。代码将电子邮件的主题和正文插入 Word 文档中紧邻启用智能标记的文本的后面(图 5)。

图 5. 插入来自电子邮件的数据之后的文档内容

当然,您还可以更改此功能,包括更改表格格式、代码将哪些字段内容插入文档以及代码将这些字段内容放到何处。

注 如何以编程方式设置 Word 内容的格式超出了本文的范围,您可以通过参考本文结尾列出的资源来了解有关如何进行 Word 对象模型编程的更多信息。

识别

智能标记代码中的主要识别功能是将文本输入与某个条件进行比较,并确定该文本是否重要。例如,您可以根据硬编码列表(最不灵活但速度最快的机制)、动态列表或正则表达式来进行比较。本文的示例使用了一个 XML 文件(图 1),该文件含有智能标记 DLL 在运行时加载的术语。该 DLL 将加载的术语列表存储在内存中,并使用它与文本输入进行比较。以下为加载该 XML 文件并在内存中存储术语列表的代码:

Public Sub SmartTagInitialize( _

ByVal ApplicationName As String) _

Implements SmartTags.ISmartTagRecognizer2. _

SmartTagInitialize

Dim xmlDoc As New Xml.XmlTextReader("SearchTerms.xml")

While xmlDoc.Read

If xmlDoc.NodeType = Xml.XmlNodeType.Text Then

ReDim Preserve termList(termCount)

termList(termCount) = xmlDoc.Value()

termCount = termCount + 1

End If

End While

End Sub

该代码在 SmartTagInitialize 事件激发时执行。您还可以将智能标记编写为在其他时间加载列表,或者定期检查是否有更新(这一切都需要不同但并不困难的代码)。

该列表加载后,Recognize 或 Recognize2 方法中的代码可以使用它与用户在文档中键入的内容进行比较。

注 当您实现上述接口以便在 Office 2003 的各个版本中创建附加的智能标记识别器或操作处理程序时,还可以实现旧式智能标记接口(版本 1.0 )或新式接口(版本 2.0 )。 Smart Tag Type Library 2.0 包含了这两个接口版本。 Recognize 方法属于版本 1.0,Recognize2 方法属于版本 2.0。同样,InvokeVerb 操作方法用于版本 1.0,而 InvokeVerb2 用于版本 2.0。本文中的代码使用的是版本 2.0 方法。

识别器主要用于确定给定的文本字符串是否相关。您必须根据需要为此功能的逻辑编写代码。下面是 Recognize2 方法的逻辑:

Dim i As Integer

Dim propbag As SmartTags.ISmartTagProperties

Dim token As SmartTags.ISmartTagToken

Try

Dim nToken As Integer

If Not TokenList Is Nothing Then

For nToken = 1 To TokenList.Count

= TokenList.Item(nToken)

If Not token Is Nothing Then

For i = 0 To termCount - 1

If token.Text.ToLower = termList(i).ToLower Then

propbag = RecognizerSite2.GetNewPropertyBag

RecognizerSite2.CommitSmartTag2( _

SEARCH_NAMESPACE, _

token.Start, token.Length, propbag)

End If

Next i

End If

Next

End If

Catch ex As Exception

' Add exception handling code

End Try

该代码对作为 Recognize2 方法的参数传递的 TokenList 集合进行遍历。TokenList 集合包含有您希望代码对其进行计算的文本。当您遍历该集合时,会将它的项目与您在读取术语列表 XML 文件后存储在内存中的项目进行比较。

当代码找到匹配项时,它将得到一个新的 PropertyBag 对象并提交一个智能标记,从而用一个命名空间属性有效地标明了识别的文本。当您在 Word 中将光标悬停于该文本之上时,应用程序将知道该文本以这种方式标明,并显示一个在处理智能标记操作的类中指定的菜单。

编写操作处理程序

识别只是智能标记技术的一部分功能。您还需要为智能标记的操作编写代码。这是最有趣的部分,因为操作处理程序中的代码能够为您希望基于识别文本发生的操作提供功能。在该示例中,相应的操作是获得识别的术语,并且在用户的 Exchange 收件箱中搜索以查找主题中包含该术语的项目。代码会显示一个 Windows 窗体,该窗体带有一个DataGrid,其中包含搜索结果列表(图 4)。右键单击该网格中的搜索结果时,会将项目的正文插入 Word 文档中紧邻智能标记文本的后面(图 5)。

下面是相应的代码

Try Select Case VerbID Case 1 If ApplicationName = "Word.Application.11" Then Dim rngWord As Word.Range = DirectCast(Target, Word.Range) Dim dv As DataView dv = UseWebDAV(rngWord.Text) If dv.Count 0 Then ' Create a new instance of the Windows form ' with a DataGrid. Add columns to the grid. End If End If End Select Catch ex As Exception ' Add exception handling code End Try

该代码的大部分致力于设置 DataGrid 的格式(稍后将显示并解释相应的代码),该网格的数据源是从自定义函数 UseWebDAV 返回的 DataView。此过程包含用于查询 Exchange 的代码。

注InvokeVerb2 方法具有一个参数,表示智能标记文本所在的 Word Range 对象:Target。您必须将该参数强制转换为声明为 Range 的变量。该代码使用 DirectCast(),因为 Target 不需要转换。

查询 Exchange

您可以用多种方式访问 Exchange 邮件存储,包括 ADO、ADO.NET、WebDAV 或简单 HTTP。本文演示如何通过 WebDAV 检索项目。WebDAV 是一种扩展 HTTP 1.1(请参阅 RFC 2616)的协议,您可以将 Microsoft Exchange Server 2003 或 Microsoft Exchange Server 2000 配置为允许使用该协议来访问它的数据存储区。使用 WebDAV 时,您将使用 XML 格式通过 HTTP 来发送请求,而 Exchange 通过返回一个 XML 流来进行响应。

注一种与使用 WebDAV 非常近似且需要类似查询语法的替代方法是使用 Outlook 对象模型中的 AdvancedSearch。有关详细信息,请参阅Microsoft Knowledge Base Article - 326244 How to use the AdvancedSearch method to search for an item in Out

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有