OLE让Word文档自动“写”
编程爱好者
Word是使用最广泛的文字处理软件,有时我们需要将其他系统中的数据集成到一起,生成统一的Word文档并打印。当我们在如图1的软件中输入数据后,可以自动生成如图2所示的Word文档,这能大大提高办公效率。为了实现这一功能,就需要使用到OLE技术。


一、了解OLE
OLE(Object Linking and Embedding),对象连接与嵌入,简称OLE技术。OLE不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制。通过使用OLE,应用程序之间不仅可以传送数据,还可以对其他应用程序所提供的连接与嵌入对象进行远程访问和操作。因此,可以把支持自动OLE的若干彼此独立的应用软件集成在一起,取长补短协同工作,使软件开发的效率和质量得到大幅度的提高,为应用程序间的集成与交互提供了先进的手段。
二、创建Word模板
我们建立一个简单的个人简历生成系统,将输入到软件中的个人简历信息按照Word文档模板的格式生成Word文件并打印。
打开Word,建立要输出的空表格(图3)。这样就创建了一个“个人简历”的简单模板。需要说明的是,该模板包含两个表格:一个1×1表格,边框为不可见,用来输出填表时的日期;另一个是7×4的表格,边框为粗线,用来输出个人的简历信息。

三、利用OLE技术实现
下面使用C++ Builder6.0开发环境结合COM对象的API来实现创建Word对象,并对它进行操作。为调用COM对象的API,在实现文件对应的头文件(.h文件)中,应包括下面一句代码:
#include
然后建立一个子函数(CreateWordObject),该函数的目的是创建COM对象,并返回该对象。
Variant __fastcall TMainForm::CreateWordObject()
{ Variant ObjWord;
AnsiString AppName="Word.Application" ;
……
ObjWord=CreateOleObject(AppName) ;// 创建Word的OLE对象
ObjWord.OlePropertySet("Visible",true);//设置Word窗体可见
return ObjWord;}
下面通过CreateWordObject创建一个OLE对象,并获得该对象的Documents对象,使用Documents对象的open方法打开上面建立的空表格Word文档。再取得Documents对象中的Table(表格对象),并对其中的Cell(单元格对象)进行处理,从而完成Word文档的自动生成。下面是主要的代码与说明:
AnsiString Content,path;
Variant V,Vdocuments,Vdocument1, vTable,vCell;
// 获得Word自动化对象Application
V=CreateWordObject();
//通过Application 获取Documents对象
Vdocuments=V.OlePropertyGet("Documents");
path=GetCurrentDir();
//设置要打开的文件所在的路径
path=path+"\\个人简历.doc";
//使用Documents 对象的Open方法,打开模板文件
Vdocument1=Vdocuments.OleFunction("Open",path.c_str());
//输入填表时间
//获取当前Documents对象中的第一个表格对象
vTable=V.OlePropertyGet("ActiveDocument").OleFunc tion("Range").OlePropertyGet("Tables").OleFunction("Item", 1);
//获取Table表格对象中的位于第一行、第一列的Cell单元格对象
vCell=vTable.OleFunction("Cell",1,1);
//获取系统当前日期
Content=DateToStr(Date());
//向指定的Cell单元格中写入数据信息
vCell.OlePropertySet("Range",Content.c_str());
//输入表格中的数据
//获取当前Documents对象中的第二个Table表格对象
vTable=V.OlePropertyGet("ActiveDocument").OleFunc tion("Range").OlePropertyGet("Tables").OleFunction("Item", 2);
//获取Table表格对象中位于第一行、第二列的Cell单元格对象
vCell=vTable.OleFunction("Cell",1,2);
Content=Person->name;//获取输入的信息
vCell.OlePropertySet("Range",Content.c_str());
……
//如果选中复选框,则打印当前Word文档
if (CheckBox1->Checked)
V.OlePropertyGet("ActiveDocument").OleProcedure("PrintOut");
……
四、总结
本文详细介绍了利用OLE技术进行Word文档的处理与生成,在实现中具体采用了COM对象的API来实现OLE对象的创建与处理,方法简便、效率高,且不限于具体的开发工具。该技术可以高效地实现多种应用的集成,特别是在办公自动化系统中有重要的使用价值。