熱點推薦:
您现在的位置: 電腦知識網 >> 電腦常識 >> 正文

使用Word 2003中的智能標記搜索收件箱數據

2013-11-11 14:22:11  來源: 電腦常識 

  簡介
  無論是撰寫電子郵件信函還是其他文檔都沒有任何一種程序能夠與 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 SmartTagsISmartTagRecognizer _
  SmartTagInitialize
  Dim xmlDoc As New XmlXmlTextReader(SearchTermsxml)
  While xmlDocRead
  If xmlDocNodeType = XmlXmlNodeTypeText Then
  ReDim Preserve termList(termCount)
  termList(termCount) = xmlDocValue()
  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 SmartTagsISmartTagProperties
  Dim token As SmartTagsISmartTagToken
  Try
  Dim nToken As Integer
  If Not TokenList Is Nothing Then
  For nToken = To TokenListCount
  = TokenListItem(nToken)
  If Not token Is Nothing Then
  For i = To termCount
  If tokenTextToLower = termList(i)ToLower Then
  propbag = RecognizerSiteGetNewPropertyBag
  RecognizerSiteCommitSmartTag( _
  SEARCH_NAMESPACE _
  tokenStart tokenLength 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 = WordApplication Then Dim rngWord As WordRange = DirectCast(Target WordRange) Dim dv As DataView dv = UseWebDAV(rngWordText) If dvCount > 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 郵件存儲包括 ADOADONETWebDAV 或簡單 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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.