簡介 無論是撰寫電子郵件
信函還是其他文檔
都沒有任何一種程序能夠與 Microsoft Office Word
的能力相比
您可以訪問強大的模板
樣式
搜索服務等許多功能
智能標記使您可以基於在 Word 文檔中鍵入的文本來采取操作
從而提供了更好的體驗
例如
當您鍵入某個人的姓名時
Word 可以將其識別為人員姓名
並且允許您在自己的 Outlook 聯系人中快速搜索該姓名
並從那裡采取操作
此功能非常適用於聯系人
但是
如果是其他類型的內容
會怎樣呢?使用 Outlook
您可以在 Exchange 郵件存儲中存儲任務
聯系人
約會
便箋
電子郵件
公告等許多內容
能夠標明文檔中的字詞並將它們連接到郵件存儲中的上述其他內容類型的智能標記具有類似的價值
但不存在這樣的內置智能標記
幸而
您可以十分輕松地開發此類智能標記
注 本文假設讀者了解智能標記的用法
相應的智能標記 API 以及開發智能標記的基本過程
有關開發智能標記的詳細信息
請參閱 MSDN Office 開發人員中心上智能標記門戶的 Getting Started 部分
工作原理 該智能標記具有一個識別程序
該程序可以對 Word 中的文本輸入進行計算
並確定鍵入的字詞是否與預定義的搜索術語列表中的某個術語相匹配
您負責創建該術語列表
並將值存儲在 XML 文件中
智能標記 DLL 在 Word 首次加載智能標記時讀取此文件
並且將術語緩存在內存中
圖
顯示了包含術語列表的 XML 文件的內容
圖 用於識別的術語列表 當 Word 發現鍵入的字詞與列表中的某個術語相匹配時
就會為匹配的字詞指定一個屬性
從而將其標明為智能標記
圖
顯示了一個 Word 文檔中的已識別術語
圖 用智能標記標明的已識別術語 然後
您可以通過將光標懸停在所標明字詞的上方來激活智能標記菜單
智能標記菜單顯示了一個用於搜索郵箱的自定義項目(圖
)
圖 已識別術語的智能標記操作菜單 單擊該項目會使智能標記執行相應的代碼
以便在 Exchange 郵件存儲中搜索收件箱中在主題行上包含該搜索術語的電子郵件
智能標記在一個 Windows 窗體中顯示結果
該窗體帶有一個 DataGrid
其中列出了主題中包含該搜索術語的郵件項目(圖
)
圖 Windows窗體中的搜索結果 在此例中
DataGrid 僅顯示電子郵件主題的字段以及發件人的信息
但是
它在幕後還檢索其他電子郵件字段(如正文)
盡管沒有顯示這些字段
通過簡單地更改網格的屬性
您可以顯示這些隱藏字段
本文稍後將說明如何完成該操作
該示例的最後一項功能是使您可以將所選電子郵件的主要文本插入到 Word 文檔中
您可以通過將光標懸停在 DataGrid 中某行的上方並右鍵單擊該項目來完成此操作
代碼將電子郵件的主題和正文插入 Word 文檔中緊鄰啟用智能標記的文本的後面(圖
)
圖 插入來自電子郵件的數據之後的文檔內容 當然
您還可以更改此功能
包括更改表格格式
代碼將哪些字段內容插入文檔以及代碼將這些字段內容放到何處
注 如何以編程方式設置 Word 內容的格式超出了本文的范圍
您可以通過參考本文結尾列出的資源來了解有關如何進行 Word 對象模型編程的更多信息
識別 智能標記代碼中的主要識別功能是將文本輸入與某個條件進行比較
並確定該文本是否重要
例如
您可以根據硬編碼列表(最不靈活但速度最快的機制)
動態列表或正則表達式來進行比較
本文的示例使用了一個 XML 文件(圖
)
該文件含有智能標記 DLL 在運行時加載的術語
該 DLL 將加載的術語列表存儲在內存中
並使用它與文本輸入進行比較
以下為加載該 XML 文件並在內存中存儲術語列表的代碼
Public Sub SmartTagInitialize( _
ByVal ApplicationName As String) _
Implements SmartTags
ISmartTagRecognizer
_
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 +
End If
End While
End Sub
該代碼在 SmartTagInitialize 事件激發時執行
您還可以將智能標記編寫為在其他時間加載列表
或者定期檢查是否有更新(這一切都需要不同但並不困難的代碼)
該列表加載後
Recognize 或 Recognize
方法中的代碼可以使用它與用戶在文檔中鍵入的內容進行比較
注 當您實現上述接口以便在 Office
的各個版本中創建附加的智能標記識別器或操作處理程序時
還可以實現舊式智能標記接口(版本
)或新式接口(版本
)
Smart Tag Type Library
包含了這兩個接口版本
Recognize 方法屬於版本
Recognize
方法屬於版本
同樣
InvokeVerb 操作方法用於版本
而 InvokeVerb
用於版本
本文中的代碼使用的是版本
方法
識別器主要用於確定給定的文本字符串是否相關
您必須根據需要為此功能的邏輯編寫代碼
下面是 Recognize
方法的邏輯
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 =
To TokenList
Count
= TokenList
Item(nToken)
If Not token Is Nothing Then
For i =
To termCount
If token
Text
ToLower = termList(i)
ToLower Then
propbag = RecognizerSite
GetNewPropertyBag
RecognizerSite
CommitSmartTag
( _
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
該代碼對作為 Recognize
方法的參數傳遞的 TokenList 集合進行遍歷
TokenList 集合包含有您希望代碼對其進行計算的文本
當您遍歷該集合時
會將它的項目與您在讀取術語列表 XML 文件後存儲在內存中的項目進行比較
當代碼找到匹配項時
它將得到一個新的 PropertyBag 對象並提交一個智能標記
從而用一個命名空間屬性有效地標明了識別的文本
當您在 Word 中將光標懸停於該文本之上時
應用程序將知道該文本以這種方式標明
並顯示一個在處理智能標記操作的類中指定的菜單
編寫操作處理程序 識別只是智能標記技術的一部分功能
您還需要為智能標記的操作編寫代碼
這是最有趣的部分
因為操作處理程序中的代碼能夠為您希望基於識別文本發生的操作提供功能
在該示例中
相應的操作是獲得識別的術語
並且在用戶的 Exchange 收件箱中搜索以查找主題中包含該術語的項目
代碼會顯示一個 Windows 窗體
該窗體帶有一個DataGrid
其中包含搜索結果列表(圖
)
右鍵單擊該網格中的搜索結果時
會將項目的正文插入 Word 文檔中緊鄰智能標記文本的後面(圖
)
下面是相應的代碼 Try Select Case VerbID Case
If ApplicationName =
Word
Application
Then Dim rngWord As Word
Range = DirectCast(Target
Word
Range) Dim dv As DataView dv = UseWebDAV(rngWord
Text) If dv
Count >
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 的代碼
注InvokeVerb
方法具有一個參數
表示智能標記文本所在的 Word Range 對象
Target
您必須將該參數強制轉換為聲明為 Range 的變量
該代碼使用 DirectCast()
因為 Target 不需要轉換
查詢 Exchange 您可以用多種方式訪問 Exchange 郵件存儲
包括 ADO
ADO
NET
WebDAV 或簡單 HTTP
本文演示如何通過 WebDAV 檢索項目
WebDAV 是一種擴展 HTTP
(請參閱 RFC
)的協議
您可以將 Microsoft Exchange Server
或 Microsoft Exchange Server
配置為允許使用該協議來訪問它的數據存儲區
使用 WebDAV 時
您將使用 XML 格式通過 HTTP 來發送請求
而 Exchange 通過返回一個 XML 流來進行響應
注一種與使用 WebDAV 非常近似且需要類似查詢語法的替代方法是使用 Outlook 對象模型中的 AdvancedSearch
有關詳細信息
請參閱Microsoft Knowledge Base Article
How to use the AdvancedSearch method to search for an item in Out
From:http://tw.wingwit.com/Article/Common/201311/5273.html