基于.NET技术的文档自动化处理研究
2021-01-13唐云婷
唐云婷
(北海职业学院,广西 北海 536000)
Microsoft Office文档是日常办公的主要软件,其占据非常大的市场份额,在某些场合下需要对范围限定的文档进行批处理,以判断其内容是否符合期望内容,自动化处理是一个良好的解决方案。
1 Word文档
Microsoft Office Word是微软公司的一个功能强大、流行的文字处理器应用程序,具备完善的文档(如信函、论文、报表和手册等)处理能力,作为 Microsoft Office 套件的核心程序,Word提供了许多易于使用的文档创建工具,同时也提供了丰富的功能集供创建复杂的文档使用。第一个Windows版本的Word发售于1989年,它被认为是 Office 的主要程序,在文字处理领域其份额几乎是统治级,其自称规则的DOC格式也被推至行业标准。
Office系列软件是高校计算机应用基础课的必学软件,也是大学计算机等级考试的基础软件、日常办公的常用软件。Word是Office系列里重要的套件之一,围绕Office自动阅卷的研究多如牛毛,但涉及的环境复杂,无法统一试题标准,故目前市面上也没有此类文档自动处理软件。
2 NET Framework
2002年,微软发布了.NET Framework的第一个版本,并为其技术实现制订了一套完整的规范,这套规范便是CLI(Common Language Infrastructure,公共语言基础结构)。CLI由CTS(Common Type System,公共类型系统)、CLS(Common Language Specification,公共语言规范)、CIL(Common Intermediate Language,公共中间语言)、CLR(Common Language Runtime,公共语言运行库)、BCL(Base Class Library,基类库)、元数据定义、语义及其他相关标准化文档、协议、规范组成。Microsoft针对CLI在Windows上的完整实现便是 .NET Framework。
.NET Framework是由微软开发的一个致力于快速应用和部署、与平台无关的透明化软件平台。.NET Framework集成了多语言组件开发和集成的环境(如C、C++、C#等),提供了一个统一的面向对象的编程环境,这一集成将软件部署和版本控制冲突的概率进一步降低,其提供的跨语言(.NET Core已支持跨系统)统一平台旨在使开发人员更便捷地建立应用程序,使这些应用程序能够无缝地运行在各种环境平台下,达到一处开发随处可用的目的。
3 组件对象模型
1993年,微软公司提出了一种组件技术,其是一种面向对象的编程模式,定义了对象在单个应用内部或多个应用内部的行为方式,是一种与平台无关、位置透明且支持网络的中间件技术,这种技术就是组件对象模型,即COM(Component Object Model),它提供了一种在不同应用程序和语言之间共享二进制代码的规范,是致力于Web服务器与客户端、增益集与Office系列软件之间交互的一项软件组件技术。COM定义了软件组件互相通信的方式,是一种二进制和网络标准,允许任意两个组件之间进行通信而忽略它们所在的软件环境(包括操作系统、编写语言),只要环境支持COM即可。COM还提供了位置透明性,当使用COM组件时,一切都变得透明,组件运行位置都将被忽略。
由于COM对象和.NET对象在生命周期、内存管理、接口服务上的差异,运行时提供了包装类来使其互相调用。Windows可以使用DLLs在二进制级别共享代码,如kernel 32.dll、user 32.dll等。
4 Word对象操作
Word文档本身是一个压缩文件,如果对某个Word文档进行解压会得到一堆XML文档的存档,由许多元素组成,这些元素通过一定的压缩算法形成Word文档,对Word的操作实际上是对组成Word文档元素的操作,也就是对象操作。在Windows平台,利用C#的面向对象特性及引用COM中的“Microsoft Word 12.0 Object. Library”库(因本机安装的版本不同,此对象库的名称可能不一样,如Microsoft Word 14.0 Object. Library),搭建Word对象操作的运行环境,对Word中的元素或对象进行实验性操作,以研究其进行自动化处理的可行性。
4.1 实验条件
研究依靠Windows下的.NET平台进行测试时,本地环境是:
操作系统windows 10 Profession,开发环境.NET Framework 4.0,开发工具Visual Studio 2013 Express 、Microsoft Office2010,开发语言C#。
4.2 实验步骤
引入“Microsoft Word 12.0 Object. Library”,其是Office 2010版本中Word对象类库,提供了丰富的操作Word所需的方法和函数,将其引入后,可以使用其提供的方法或函数对Word文档进行编辑与操作,这是实现文档自动化处理的前提,让文档成为可编程处理的对象。引用PIA(主互操作程序集,COM组件生成)时,可以设置是否嵌入互操作类型。嵌入互操作类型时,PIA不随着程序一起部署,程序只是引用COM中的类型信息,好处是可以部署到不同COM版本的环境中。如常用的Office开发“Microsoft.Office.Interop.Word”,设置嵌入互操作类型,就可以不依赖Office版本,改为互操作false后也就将PIA复制到本地。
利用C#面向对象特征,引用“Microsoft.Office.Interop.Word”提供的方法,通过基本的面向对象程序设计,实现对Word文档中的对象进行操作,现选取在Word中自动插入图片,部分代码如下:
1.wordApp.Selection.EndKey(ref unite, ref Nothing);
2.string filename=Environment.CurrentDirectory+″6.png″;
3.Object range=wordDoc.Paragraphs.Last.Range;
4.Object linkToFile=false;
5.Object saveWithDocument=true;
6.wordDoc.InlineShapes.AddPicture(filename, ref linkToFile, ref saveWithDocument, ref range);
7.wordApp.Selection.ParagraphFormat.Alignment=MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
8.wordDoc.InlineShapes[1].ScaleWidth=20;
9.wordDoc.InlineShapes[1].ScaleHeight=20;
10.wordDoc.Content.InsertAfter(″ ″);
11.wordApp.Selection.EndKey(ref unite, ref Nothing);
12.wordApp.Selection.ParagraphFormat.Alignment=MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
13.wordApp.Selection.Font.Size=10;
14.wordApp.Selection.TypeText(″北海职业学院logo ″);
对象操作完毕,结果存储至外存,需要销毁对象回收内存,以保证系统资源的合理使用,可以在程序逻辑中显式的销毁对象释放内存,也可以利用C#的垃圾回收机制自动回收内存。
4.3 实验结论
实验通过引用“Microsoft Word 12.0 Object. Library”类库,利用C#面向对象设计方法,对Word文档对象进行了字体、图片、表格等方面的自动化处理(篇幅所限仅展示一部分),实验结果表明,利用自动化(其实是半自动)思想对Word文档对象进行批处理是可行的,这让人们在处理大量格式统一却重复的文档时,有了更好的解决方案,提高工作效率的同时,节省了宝贵时间。
5 总结与展望
在.NET Framework框架下利用C#面向对象技术,引入“Microsoft Word 12.0 Object. Library”类库,介绍了利用程序逻辑操作Word对象的过程,以探索对Word文档进行自动化处理的可行性。得到实验成果的同时,了解了要实现自动识别自动判断是极其困难的,归根结底是Word的灵活性导致,其功能复杂、灵活、细节丰富,实际应用时必须结合当前环境进行逻辑设计和定制,才能实现自动化处理,这实际是一种半自动化处理方案。随着信息技术的发展,云课堂的兴起,围绕批量文档操作的研究和实践也会越来越多,软件功能也会越来越丰富,自动化程度也会越来越高。