閱讀: 196 評論: 1 做者: 周 金根 發表於 2010-05-26 09:24 原文連接html
雖然企業中多數項目每每經過自定製的界面和數據載體與後臺系統交互,但在辦公自動化、電子政務領域仍存在大量面向包括Word在內的電子文檔操做。區別於Excel、Access和InfoPath等數據爲中心的處理,Word更側重於對於文章段落內容、格式的操做。編程
實踐中,Office自動化開發中每每要面對下列挑戰:安全
但同時咱們也要看到Word自動化處理中的特色:架構
針對上述特色,爲便於重複開發量、便於開發人員訪問Word文檔須進行局部架構設計。框架
但在此以前,爲了簡化Word編程,本框架針對Bookmark訪問並操做Word,定義方法以下:ide
一、打開word文件,選擇顯示Bookmark網站
二、選擇位置,而後插入Bookmark。對於須要操做的表格區域能夠選擇整個區域後插入Bookmark。spa
抽象角度看,Word自動化過程可歸併爲「讀」、「處理」和「寫」三個主要過程,其基本工做原理以下:架構設計
圖:局部架構的工做原理設計
其中:
邏輯組件關係以下:
圖:Word自動化處理主要組件
其中:
考慮不一樣項目對Word自動化處置的差別性,設計上將Adapter獨立於應用以外,同時將每一個Adapter須要執行的操做盡可能固定,這樣對於常規操做只需調用標準Reader和Writer便可。
(注:此外,考慮到自動化處理中文檔內容的差別性,根據項目實踐爲提升數據的擴展性,通常推薦採用XML形式的數據文件。)
設計上,咱們先抽象文檔操做對象Adapter的行爲接口,定義所需的數據與文檔合併(Merge)操做:
圖:適配器邏輯結構
其中:
IDocumentAdapter
定義基本的行爲,其內容甚至能夠在沒有Reader和Writer的環境下完成合並工做,全部行爲能夠由用戶程序獨立定義;IGenericDocumentAdapter
則提供基本的操做行爲,其中經過泛型參數定義Reader反饋的數據類型以及它對應的字符串類型;DocumentAdapterBase
做爲實際Adapter的抽象類型,不只提供對應配置節的內容,同時進一步補充Reader所提取實體內容的泛型參數。這樣,經過對Adapter的三層封裝,下游程序開發人員能夠根據自動化情形的複雜程度選擇適合的擴展基礎。進一步,咱們對Reader和Writer進行擴展,提供標準情景下標準數據類型的讀寫操做。
圖:Reader部分的邏輯結構
其中:
圖:Writer部分的邏輯結構
對於Writer部分:
在完成了外部調用關係的設計後,咱們須要完成Word自動化的核心部分——經過Office Primary Interop Assembly(Office PIA)訪問Word的基本操做。
圖:項目中引用Office的PIA庫
實際使用中,Word對象模型以下:
圖:Word Object Model(摘自MSDN Microsoft Visual Studio Tools for the Microsoft Office system (version 3.0) 部分)
其中,Application表明一個WinWord.exe進程,對其打開關閉代價較大,頻繁的打開、關閉勢必會對後臺文檔自動化帶來較大的運行負載,爲此,須要集中控制。而每一個Word文檔能夠經過Document得到引用,而後經過Bookmark檢索到對應的區域(Range),進而經過Writer操做Range對象,填充、清除、修改該區域的內容。此外,考慮到相似電子表格的合併操做,每每外部數據記錄數量超過Word模板(或文檔)表格區域的大小,爲此還需增長必要的Add Row方法、Add Column方法,本文示例爲了簡便,只設計了Add Row方法。
綜上,Word自動化部分設計以下:
圖:Word自動化部分設計
爲了減小客戶端程序的工做量,常見的操做參數保存在配置文件中,這樣咱們定義整個模型的自定義配置節以下:
圖:配置對象
雖然直接調用Word PIA接口能夠較快的完成一個具體Word自動化處理,但隨着用戶需求的變化,該類項目每每必須面臨常常性的修改,爲了儘可能將修改控制在局部、提升下游開發人員的使用效率,通常能夠經過對局部進行架構建模提高自動化框架的靈活性,而額外的工做量主要集中在抽象出Reader、Writer和根據文檔操做目標定義相關的Adapter。
完成上述內容後,咱們能夠經過三個示例驗證上述局部架構的適應性。
爲了操做word中的表格,Reader每每能夠從數據文件中提取一組多值實體。
點擊下載示例代碼。
最新新聞:
· 谷歌收購廣告公司Invite Media(2010-06-02 22:16)
· AT&T擬推新數據計劃 iPad 3G用戶再也不享有無限(2010-06-02 21:36)
· 支持ARM架構:新版嵌入式Windows 7 CTP發佈(2010-06-02 19:51)
· Apple的平臺之路(三)(2010-06-02 19:27)
· Ubuntu 10.04可支持iPhone(2010-06-02 18:14)
編輯推薦:關於Java與.NET的討論