




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Delphi下word的应用技术药品信息在药典中的表达形式主要包括:一般文字描述、图形描述(结构式等)、表格描述、公式描述、特殊字符描述(分子式等)等,可能还包括其它特殊格式的表达形式。而且这些表达形式不确定地分散在各药品的各种属性中。要在数据库中存储这些内容,最好的办法就是以二进制形式存储。由于源数据大多是以word文档格式存放的,所以如何应用delphi程序来读取、拆分、保存、修改、显示word文档成了我们面临的首要问题。一、Word的调用技术可以说Word是对Com技术支持最好的软件,这样说似乎是太极端了一点,但是Word提供的强大的编程接口技术却能够是我们通过程序控制Word的任何一部分。无论是文件的打开、存盘、打印还是文档中表格的自动绘制。通过编程软件,可以灵活的操纵word,这里以Delphi为例,进行详细描述:在Delphi中调用Word软件文件,归纳起来有四种方法:1 使用Delphi提供的Servers控件调用Word,使用Word的属性;使用Delphi的Servers控件来操纵Word,在编程时Delphi能够实现代码提示,总体上看能够较好的实现Delphi对Word的控制。2 通过真正的Com技术,将Office类库全部导入Delphi中,利用Com技术编程;通过真正的Com技术,将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中,利用Com技术编程利用真正的Com技术,将MsWord9.OLD文件类库导入,然后利用Com技术进行使用。整体上类似使用Delphi的Servers控件,稍微比Servers控件麻烦,优缺点与Servers控件相同。3 通过Delphi的控件TOleContainer 将Word嵌入;将Word嵌入这是最简单的Ole嵌入,能够直接将Word文档调用,只需要使用ToleContainer.Run就可以将Word文档直接启动。且这样启动的Word文档与Delphi程序是一个整体(从界面上看),但是它存在不可克服的缺点,即不能通过Delphi控制Word文档,也就不能实现将灵活操纵Word的目的4 使用CreateOleObject将启动Word,然后以Ole方式对Word进行控制;本办法是使用以CreateOleObjects方式调用Word,实际上还是Ole,但是这种方式能够真正做到完全控制Word文件,能够使用Word的所有属性,包括自己编写的VBA宏代码。与Servers控件和com技术相比,本方法能够真正地使用Word的各种属性,和在VBA中编写自己的代码基本一样,可以缺省的代码也不需要使用。考虑到编程的繁易程度,我们采用了1、3相结合的技术来实现对word的操控:word文档的显示、修改可以通过ToleContainer来实现;word文档的拆分、合并则通过Servers控件来实现;二、用Servers控件word应用程序的启动与关闭1启动wordtry WordApplication1.Connect; WordApplication1.Visible:=false;/word后台运行,不可见except showmessage(初始化程序错误,请检查!); Application.Terminate;end;2关闭wordvar bs:olevariant;begin try bs:=false;/不保存直接退出 WordApplication1.Quit(bs); except end;end;三、word文档的打开与连接var breadonly,l_filename,l_confirm,othervar,l_index:olevariant;begin othervar:=emptyParam; breadonly:=false; l_index:=1; l_filename:=c:temp.doc;WordApplication1.Documents.Openold(l_filename, l_confirm,breadonly,othervar,othervar,othervar, othervar,othervar,othervar,othervar);/打开文档 WordDocument1.connectto(WordApplication1.Documents.item(l_index);/连接 . WordDocument1.Save;/保存文档 WordDocument1.Close;/关闭文档 WordDocument1.Disconnect;/断开连接End;四、word文档的拆分根据一定的规则,把一篇文档分割成若干段落,保存到相应数据库字段中。我们采用剪贴板技术从源文档中拷贝一段内容,复制到一个临时文件中,段落内容拷贝完全后,将临时文件内容保存导数据库中。我们根据【属性名称】属性值,将属性值分割、保存到相应的数据库字段中,程序流程如下:for i:=1 to WordDocument1.Paragraphs.count dobegin if not 当前段落位于表格中 then/表格处理与一般文本处理方式不同begins:=WordDocument1.Paragraphs.Item(i).Range.Text;根据s取得属性名称sCurrentfieldname;if sCurrentfieldname thenbegin /找到下一个属性值时,将临时文件的内容存入前一个属性字段中 if sfieldnamesCurrentfieldname then begin 保存关闭临时文档,将临时文档内容存库; openwordtest; end; 清空临时文件; Fstart:=0;fend:=0;/文档指针复位 sfieldname:=sCurrentfieldname; /取出同段落中】后的文字 Fstart1:=ilength;/ilength为起始位置 Fend1:=WordDocument1.Paragraphs.Item(i).Range.End_; r1:=WordDocument1.Range(Fstart1,Fend1); r1.Copy; r:=WordDocument2.Range(Fstart,Fend); r.Paste; Fstart:=WordDocument2.Sentences.Last.End_-1; Fend:=WordDocument2.Sentences.Last.End_-1;Endelse begin /文本段直接粘贴 WordDocument1.Paragraphs.Item(i).Range.Copy; r:=WordDocument2.Range(Fstart,Fend); r.Paste; Fstart:=WordDocument2.Sentences.Last.End_-1; Fend:=WordDocument2.Sentences.Last.End_-1;End;else/处理表格beginif 起始位置未表格起始位置 thenbegin WordDocument1.Tables.Item(itable).Range.Copy; r:=WordDocument2.Range(Fstart,Fend); r.Paste; Fstart:=WordDocument2.Sentences.Last.End_-1; Fend:=WordDocument2.Sentences.Last.End_-1;end;end; end;/循环结束/处理最后一个数据项if 当前字段 thenbegin保存关闭临时文档,将临时文档内容存库;end;五、word文档的合并从数据库中读出各自段的值,并将这些值合并成一篇word文档,实现流程:打开并连接目标文件WordDocument2;for i:=0 to FieldCount-1 do begin if Fieldsi.IsBlob then/只读取二进制字段 begin 清空临时文件WordDocument1; 将二进制流读入临时文件WordDocument1打开并连接临时文件WordDocument1; WordDocument1.Range.Copy; r:=WordDocument2.Range(Fstart,Fend); r.Paste; Fstart:=WordDocument2.Sentences.Last.End_-1; Fend:=WordDocument2.Sentences.Last.End_-1; end; end;六、word文档字数统计1使用Servers控件时WordDocument1.Characters.Count/字符数WordDocument1.Words.Count/字数WordDocument1.Paragraphs.Count/段落数WordDocument1.Tables.Count/表格数2使用ToleContainer时oleContainer1.OleObject.Characters.Count/字符数oleContainer1.OleObject.Words.Count/字数oleContainer1.OleObject.Paragraphs.Count/段落数oleContainer1.OleObject.Tables.Count/表格数七、word文档的显示与修改由于我们的数据内容中包含各种数据格式,用一般的文本显示控件(Tmemo、Trichedit)不能满足需求,所以我们使用ToleContainer来显示、修改word文档。使用方法如下:oleContainer1.CreateObjectFromFile(c:temp.doc,false);/创建ole对象oleContainer1.Run;oleContainer1.DestroyObject;/释放ole对象oleContainer1.SaveAsDocument(FIELDWORD);/将ole中内容保存到指定文件中八、word文档数据库保存与读取1将指定word文档以二进制形式保存到数据库中TBlobField(FieldByName(fieldname).LoadFromFile(filename);2从数据库中读取二进制数据到word文档中var MemSize: Integer; Buffer: PChar; MyFile: TStream; Stream: TBlobStream;beginStream := TBlobStream.Create(Fieldbyname(fieldname) as TBlobField, bmread); if stream.Size0 then begin MyFile:=TFileStream.Create(filename,fmcreate);/创建文件流 MyFile.Seek(0, soFromBeginning);/流定位 MemSize := Stream.Size; Inc(MemSize); Buffer := AllocMem(MemSize); try Stream.Read(Buffer,MemSize);/将流中内容读入内存 MyFile.WriteBuffer(Buffer,MemSize);/从内存中读出内容,写入文件流中 finally Myfile.Free; stream.Free; end;end;end;九、创建word空文档由于word文档具有一定的格式,其空文档大小也有11k之多,所以普通的FileCreate函数创建的空文件已不能满足要求,我们采用以下方法实现:function CreateDocFile(filename:string):boolean;/创建文件名(含路径)var template,newtemplate,ofilename,index:OleVariant; WordApplicationtemp:TWordApplication; WordDocumenttemp:TWordDocument; sdir:string;begin result:=false; if not FileExists(filename) then/判断文件是否存在 begin sdir:=ExtractFileDir(filename);/得到文件路径 if not DirectoryExists(sdir) then begin if not ForceDirectories(sdir) then /创建目录 exit; end;try /调用word程序 WordApplicationtemp:=TWordApplication.Create(nil); WordDocumenttemp:=TWordDocument.Create(nil); WordApplicationtemp.Connect; template:=EmptyParam; newtemplate:=true; index:=1; ofilename:=filename; WordApplicationtemp.Documents.Addold(template
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新能源行业2025绿色物流碳减排量核算与认证市场趋势分析
- 保存文档的教学课件
- 毒驾课件教学课件
- 2025年内蒙古赤峰市、呼和浩特市校际联考生物高三第一学期期末综合测试试题
- 2025年人事招聘笔试模拟题及解析
- 2025年心理咨询师二级面试高频考点及模拟题
- 窗帘企业文化宣传合同
- 汉字教学案例与分析课件
- 医院题库及答案
- 种植绿化施工合同
- 煤矿防治水课件教学
- 二零二五年度汽车配件销售合作协议
- 手术室术中无菌技术课件
- 2025至2030中国食品工业中的X射线检查系统行业项目调研及市场前景预测评估报告
- 海门市小升初历年数学试卷
- 企业安全生产费用支出负面清单
- 2025-2030中国天然气汽车行业发展分析及发展前景与趋势预测研究报告
- 2024云南师范大学辅导员招聘笔试真题
- 2025年广省中考作文《走到田野去》写作指导及范文
- 产品经理绩效管理制度
- 2025年山东省中考数学试卷(含答案逐题解析)
评论
0/150
提交评论