在Delphi中怎样实现对Microsoft Word的编程 夏静清 (广州市广播电视大学理工部,510030) 摘要:文章介绍了在Delphi q-利用OLE Automation技术实现对Word编程的三 种方法,对Word对象的属性、方法及对象之间的关系也进行了介绍。 关键词:OLE automation;Word对象;Word控件;OLE Object对象;VBA Abstract:This paper introduces three methods implementing the programming of the Microsoft Word in Delphi,and the method,property of the Word 0bject. Key wards:0LE automation;Word Object;Word component;0LE Object;VBA Delphi是近几年国内最流行的软件开 法和属性可以被客户程序调用。 发工具之一,在实际应用中,经常会有在应用 程序中进行文字处理和编辑排版的需求。虽 l 应用Delphi系统中提供的Word 说Delphi中也提供了TRichEdit控件进行 控件进行对Word的编程 文字处理,但很难真正实现Microsoft Word 在Delphi的server控件页面中(Delphi 的强大功能。所以,通过OLE Automation等 5.0,Delphi 6.0中提供),系统提供了 技术控制Word进行编辑排版的文字处理工 TWordApplication TWordDocument、 作就显得尤其必要。下面将详细介绍在 TWordFont等控件。通过应用这些控件就可 Delphi中实现对Word编程的几种方法。 以实现对Word的控制。 . Microsoft Word是一个基于Microsoft WordDocument代表一篇文档,可使用 的COM组件模型的自动化服务器程序, Document对象或Documents集合对象的方 C0M组件模型则是一种基于客户/服务器 法add和open来创建新文档和打开修改文 结构的技术规范,它使得服务器程序与应用 档。 程序之间的交互成为可能。除了基本的 Range对象指文档中的某一连续区域。 C0M服务外,Microsoft对这项技术进行了 每个Range对象都是通过开始和结束字符 相应的扩充,比如0LE Automation技术。 位置来定义的。使用Range对象可以定义文 在OLE Automation技术中,一个可以 档的某一部分。一个Range对象小至只是一 提供它自己的对象、方法及属性给其他应用 个插入点,大至包括整篇文档。Start和End 程序调用的应用程序称为OLE Server(即 属性返回或设置Range对象的开始和结束 OLE服务器)。而使用OLE Server对象的程 字符位置。在文档开头的字符位置为零,第一 序则被称为OLE Client(0LE客户)。利用 个字符之后的位置为1,以此类推。 0LE Automation技术,一个客户应用程序 图 1 显示了 WordApplication、 可以实现对服务器应用程序的控制。服务器 WordDocument、Range等对象的层次关系。 提供可编程对象,也就是说服务器对象的方 Font对象包含了各种字体属性(-7-体名 收稿日期:2002—03一l6;修回日期:2002—05—15 作者简介:夏静清,女.工程师.研究方向:计算机应用软件开发。 ・26・ 《电脑与信息技术)2002年第3期 维普资讯 http://www.cqvip.com
称、大小和颜色等)。TablesOfContent对象代表文档中的一(itemindex));WordDocumentI.SaveAs(docFileName)。个目录,可使用该对象的add方法在文档中创建一个目录。关于相关对象的属性和方法请参阅office安装光盘里提供的VBA帮助文件(Office97的帮助文件为vbawrd8.hip,Office2000的帮助文件为vbawrd9.chm),以及Delphi5.0系统中的Word97.pas文件,、Delphi6.0中的Word2000.pas文件。‘设置标题字体,可设置字体、字体大小、加粗、斜体、下划线等。其中wdstyleheadinglwdstyleheading2表表示示标标题题1,2,wdstyleheading3表示标题3。wdstyleitemindex:。wdstyleheadingl‘//标题1”。。dDo。“”。“。1・Sty’e。・Irem下面举例具体说明:加入对象实例.‘”d。。Y‰。”inde。’・‘。nt.Name:。’宋体’;”。。dDo。“”。“。’・s。yl?。・’。。m(wds。yl。i。。”i“d。。)・f。“。・size:一10;在表单中加入控件TWordApplication,TW。,d【)0。。。。。t、Tw。,dF。。t的实例。插入正文。调用Range对象的InsertBefore、InsertAfter方法在指定位置的W。rdApplicati。n1、W。rdD。cumenr1、w。rdF。ntl;.启动Word,实现与Word的连接前后插入文本内容,并通过Parag’raph对象的SetAlignment方法设置正文位置是否—t,。WordApplicationl.Connect:except居中、居左、居右。Alignment:=wdAlignParagraphCenter;Application.MessageBox(’不能生成文档,请确认是否安装了Word’,’提示’mb—//居中wordDocumentI・Range・Paragraphs.Set—ok):Abort;Alignment(Alignment);wordDocumemI.Range.1nsertParagraph;end:wordDocumeml.Range.InsertAfter(‘正文’);WordApplicationl.Visible:=true:・・插入分隔符通过设置分隔符的类型可以插入分节符、分页符等多种分隔符。breakType:=wdPageBreak;//分页符wordl)ocumentI.Range(rangeStart).lnsertBreak(breakType):生成新Word文档,或打开已经存在的Word文档。WordApplicationI.Documents.Add(template,newtemplate);WordDocumentl.ConnectTo(WordApplicationl.Documents.Item・插入页码・27・《电脑与信息技术}2002年第3期维普资讯 http://www.cqvip.com
设氍页码位置参数pageNumberStyle:一 TObject); vat template,newtemplate,itemindex, wdAlignl ageNumberRight;//页码皤右docFileName:Olevariant: 设 首页是否显示页码 pageNumberSty1e1:一false: false一不显示alignment:OleVariant; //true一显示 begin docFileName:一 sample1.doc ; 插入页面顶端 w。rdD。cument1.Range.Secti。ns.Item(1). Headers.Item(1).PageNumbers. if fileExists(docFileName)then begin beep Add(pageNumberStyle, if application・MessageBox(’文档已经存 pageNumberStyle1); 在,请确认是否覆盖?’,’警告’mb一 插入页面底端 wordDOCUment1.Range.Sections.Item(1). F。。ters.Item(1).PageNumbers. Add(pageNumberStyle,pageNumberStyle1): ・okcance1)一idcancel tl en exit end template: emptyPar;Im; “ t。mpl t。:一t 。: 生成目录 。 ndex: Y 。 dApplication1・Connect; uhs:一true://设援参数 I1h1:一1; uh1:一【): uf:一false: , //建立Word连接 excePt tid:一…1,; raI)1]:一true; applicarion・MessageBox(’不能生成文档, 请确认是 安装I,Word’,’提示’mb— ok); IFI12:一true addstyle:一,tit1e・; wordDocumeI、t1.TablesOfContents. Add(WordDocumeI1t1.R J1nge(contentStart, Abort; end; wordApplic;Itionl・Visible:一t rue; c0ntentStart),uh ,uh1,1h1.uf.tid.rapn, ipn.addstv1e): //ia ̄Word wordApplicationI・Documents・Add(template, //设 目录格式formatstyle newtemplate); //以空换饭新建文 wordDocumentI・ConnectTo (WordApplicatio“1・DocumeI1ts・1ten1 (itemindex)): word1)ocumentI.Sax eAs(docFileName); word【)ocument1.T,IblesOfContent . SetFormat(formatSty1e);w()rdDocument 1.TablesOfContents.1ten1(1).uDdate; 注意:以上Wo d对象的方法调用时,参 数的类型都必须定义为O1eVariant类型。 宰彻f. 将新文馅保存为 。 Do “眦“ ・R l1R ・F。 Name:一’ ar ’; //设 文档字体 o rd1)o c umdI)oent1.(1) 在 form 中 加 入控件 。R a ng ze:一。 ; eFont.Si.rn。m1R.g.}j。ld:—1;TwordApplication、TWord1)ocumeI1t的实 例WordApplication1、Word1)ocument1; (2)在form中加入按钮Button1,在 ali gl1n]ent:一wdAllgnP|Ira gr‘1I)11(、ent…//设髓内容居【}1 w()rdDocume11t1.Ran Paragraphs. Button 1的click事件中输入以下代码: procedu re l'mainfrm.BuuonlClick(Sender: ・Set Alignn 1t(alignment); wordL)ocument1.Range.1nsertParagraph: 28・ 《电脑与信息技术}2002年第3期 维普资讯 http://www.cqvip.com
//插入文 内容 wordDocument 1.Range.InsertAfter 程序运行前,系统是无法预报的。 实例: 在form中加入按钮button3,在按钮的 (’演示文档’十#1 3); end: click.-'-jri ̄-中输入以下代码: procedure Tmainfrm,Button3Click 2 通过创建createOleObject调用 Word (Sender:TObject); Var Vole:OleVariant: begin 通过Ole自动化技术,用户在Delphi应 用程序中可以访问Word中对象的方法和属 性。Word做为Ole自动化服务器,可以由 Vole:一Create0le0bject(’word.basic’): //I2,1 Word.basic时象 Vole,Filenew: /新建Word文 I)elphi应用程序控制。具体方法如下: ・在程序的USeS语句中加入Comobj单 Vole.Insm’t(’Hello’); //插入【j、j容 Vole.FileSax,eAs(’e:\sample2,doc’); 元,该单元中的 l'oleAuto类提供了强大的 Ole自动化支持; ・/ /保仃 Vole.FileClose(1): //关闭文档并保仃 end: 定义作为Ole对象的OleVariant变 VOle的 量,例如,以下定义了一个并且在程序的USeS语句中加入Comobj 单元; OleVariant变量: Var Vole:OleVariant; ・如果要了解更多关于Word Basic的属 性和方法,请参考微软提供的VBA帮助文 件。 通过CreateOleObject函数启动 Word服务器,并将其赋给变量VOle: Vole:一CreateOle0biect(‘word.basic’): 在得到一个Word Basic自动化对象的 引用后,就可以自由调用它的属性和方法。 ・3 通过Delphi中的TOleContainer 控件实现对Word的控制 在设计阶段,将 l'OleContainer控件拖 访问Word Basic自动化对象的特性 Vole.Filenews; Vole.Insert(‘Hello’); 与方法.下面举例说明: 新建文档插入文本放到表单中,命名为()lecontaine r】,确定位 和大小后,用鼠际双击它调出“Ole对象类 型选择窗口”,通过该窗口选择Word就可建 立一个Word,对象。在程序运行中,可以通过 保存文档Vole.FileSave(。文件名’); 保存文件并设 密码pswd。 Vole.FileSave(‘文件名’, password:=‘pswd’); 调用InsertObject函数打开该对话框。 通过对 l'OleContainer的属性和方法的 调用,可达到对Word对象的控制。举例如 下: ・关闭文档 保存并关闭文档 Vole.FileClose(1); 打开选择插入对象对话框 OleComainet’1,InsertObjectDialog f ・关闭文档不保存 Vole.FileClose(0); 打开文档 OleContainer l,LoadFromFile(Filename); 打印文档 Vole.FilePrint; 由于1)elphi无法对Ole对象中的属性 fnYy ̄*,j调用进行运行时的语法检测,所以, Ole对象中的属性和方法的错误调用在应用 注意:这里只能打开文档格式是OI E文 档的文件 ・创建文档 O1eContainer1.CreateObjectfroITlfile ・29・ 《电脑与信息技术))2002年第3期 维普资讯 http://www.cqvip.com
(Filename,False); (2)在Button2的click事件中输入以下 注意:这里的文档是doc文档。 代码即可实现Word调用: ・保存文档 procedure Tmainfrm.Button2Click Olecontainer1.SaveToFile(filename); (Sender:TObject); 注意:这里保存的文档格式是OI E文 、rar tempstr:string; 档,用Word应用程序是不能直接打开的。如 begin 果想将以OLE格式保留的doc文档用Word tempstr:一’c:\sample2.doc’; 打开,要将该文件进行格式转换,具体办法就 if not(fileExists(tempstr))them 是将该文档中的标记OLE文档的文件头去 begin beep 掉。 application.MessageBox(’文档不存在’,’ Olecontainer 1.SaxreAsDocumnet 提示’,mb ok); (Const filename:string); exit; 以Ole对象本身的格式保存,比如说 end; Word文档。 ()leContainer1.CreateObjectFromFile ・关闭OleContainer (tempstr,false);Ilth doc文档创建 OleContainer1.Close;//退出Ole眼务器 OleContainer1.DoVerb(1); //调用Word ・打开Word end; OleContainer1.DoVerb(verb): 以上所述都是作者在实际工作中的一些 verb值为ovShow时为显示Word,为 经验总结,其实Ole Automation技术是一项 ovPrimary时,激活Word。可通过调用 非常实用并应用广泛的技术。通过灵活应用, ToleContainer对象的objectVerbs属性来列 可以实现对更多的OLE Server应用程序的 出verb。 调用和控制,比如对Office的其它应用程序 ・插入文本 (EXCEL,Powerpoint、Access)、Graph 97 OleContainer1.insert(string1): 等。 ・打印文档 参考文献: OleContainer1.print; [1]Miller T,Powell D,等.Delphi 3开发使片J手册.机 实例: 械工业出版社. (1)在form中加入一个OleContainer E2]Teixeira S,pacheco x.等、DeLphi 5开发人员指南 控件OleContainer1,再加入按钮Button2; 机械工 出版社. ‘ ‘ ‘ ’ ‘ ’ ’ ‘ ‘ ‘ ’ ‘。‘。‘ ’。‘ ‘ ’ ’ ‘ ‘ ‘ ‘ ’ ‘、“ ‘ ‘ ‘0 ‘ ’、:/’ ‘、 (上接第13页) 在数据接口、数据模型、 环境・中国建筑出版社. 数据标准化等方面要做大量的研究。 [ ]张N’- 上的虚拟现实技术及VRMI,语商・电 (3)VR—GIs与网络地理信息系统 [。] 实技术.上海交大. (Web—GIS、Corn—GIS)相结合的研究。通过 [妇Sl。 c J D.数字化生存.海南出版社. 这项技术可实现远距离操作和遥显/遥视,从 [5]汪成为.人类认识世界的帮手…虚拟现・ 中国 而建立由虚拟实验室、虚拟影剧院、虚拟旅 院士丛书,清华大学出版社. 游、虚拟医院等虚拟的地理环境和人文环境 [ ]李・虚拟环境技术・中国铁道出版社・ 所构成的虚拟社会。参考文献: [ CF 渊‘。 』耋l拟现誊:现实系统制作指南・电子 [业出敝 与 ‘科学出版社- l 1 l 里斯贝罗 比尔.用虚拟现实设汁照佳住宅人 女 外 ±+l J・’ ・30・ 《电脑与信息技术}2002年第3期
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务