阅读: 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的讨论