
学术论坛
提高Word文档导出速度的方法研究
雷广智
(广州智讯通信系统有限公司广东广州510300)
摘要:BCB环境中处理应用程序导出Word文档时,大多采用OLE方式调用Word服务器或使用服务器组件控件的方法,但这两种方法都存在导出速度慢的缺陷。本文提出了使用RTF规范来实现导出Word文精的新方法,并将该方法应用于现有的RichView控件,从而改进了使用该控件导出Word文档方法的性能。文中还给出该应用的编程方法,并感结了应用程序实现Word文档导出的技术开发新路径。
关键调:OLE自动化服务器RTF规范
中图分类号:TP391.1
文献标识码:A
文章编号:1007-9416(2012)02-0152-04
On Solution for Speeding-Up the Export of
the Word Documents
Lei Guangzhi
Guangzhou Panocom Communication System Inc., Guangzhou, P.R.China 510300
Abstract:In the BCB environment, exporting a Word document generally uses the OLE to call the Word server or server component control method, but both of them are quite slow to export the Word documents. In this paper, the new fast approach to export the Word documents is proposed and applied to the “RichView=control" and the corresponding programming method is given. The practical test results indicate that the proposed approach is fast and feasible as well as reliable compared to the corresponding current approaches.
Key words: OLE Automation Server RTF Specification 1、引育
在BCB(BorlandC++Builder)中,实现自动导出Word文档通常使用两种方法,一种是采用OLE方式调用Word服务器,而另-种则是使用服务器组件控件。这两种方法都使用了文档自动化技术,即一个应用程序(自动化客户)操纵另一应用程序对象(自动化服务器或自动化对象)的属性和方法。MicrosoftWord、Excel, Outlook以自动化对象的方式展露出其内部的数据和功能,其它应用程序作为客户程序访问这些自动化对象。方法(method)和属性(property)是自动化对象的两个基本特性12)
这两种方法都存在导出速度较慢的间题,在导出大批数据时要花费很长时间,使人感觉很无助。本文首先概述了这两种方法,并分析了其速度侵的原因,继而提出了根据RTF规范来实现导出大文档的新方法,该新方法可很快地处理大量数据,且调试简单方便,只要
给定控制样式方法后,均能达到Word格式的给定要求。 2、现行技术方法概述
2.1使用OLE方式调用服务器
这种方式通过Varaint类,使用名字来访间word自动化对象的属性和方法。首先,通过调用静态类函数CreateObject来启动Word,调用静态函数GetActiveObject来获取对应Word的Variant对象,之后使用Variant类的OlePropertyGet,OlePropertySet,OleFunction, OleProcedure函数来操作对应word的属性、方法。
使用名字访间Word的属性和方法,是利用IDispatch接口的 Invoke成员函数调用类型信息对象的ITypelnfo::Invoke函数,进步调用到自动化对象的所有方法和属性成员函数,这种调用方法效率比较底下,事实上,我们可以通过创建一个Word文档,在其中写人特定行的文字之示例来说明这种方法处理速度缺陷,其中写入文档的代码片段如下:
for(int i = 0, i < nRowCount, i++) 152
数据
objRange = (objActiveDocument.
OlePropertyGet("Paragraphs"), OleFunction("Item", 1 + i). OlePropertyGet("Range"),
AnsiString strLine,
strLine.cat_sprintf("第%06d行",i); objRange.OlePropertySet("Text",
StringToOleStr(strLine),
objActiveDocument.
OlePropertyGet( Paragraphs"), OleFunction("Add");
在处理器为Intel(R)Core(TM)i32350 CPU 2.3GGHz,内存为4.00GB,操作系统为Win732位的计算机上,其结果如表1所示。从中可以看出这种方法在处理3页纸(A4纸,五号字体)以上的文档时,处理速度较慢。
表1使用OLE方式调用服务器测试结果
写人行数(豆)00
1000(约23页) 2000(约46真) 3000(约69更) 10000(约228页)
写人时间
Word启动 453ms
1123ms
452ms 452ms 452m5 702ms
16880ms 49078ms 95800ms 883184mc
2.2使用BCB的服务器组件控件
保存关闲 374ms 218ms 344ms 281ms 468ms
总时间 1950ms 1750ms 49874ms 96533ms 884354ms
BCB对OFFCIE2000的所有自动化服务器进行了封装。在使用自动化服务器控件时,可以直接拖动,也可以手动添加头文件"Word_2K_SRVR.h"至应用程序,自已定义TWordApplication, TWordDocument·等指针变量。首先初始化TWordApplication.