本人在用delphi对word文档进行编程中,遇到个问题,就是希望将word打开后包含到delphi创建的窗体中,从而对其进行操作。
我已经试过一些方法也查过很多资料,正如一片文章<<Delphi与Word之间的融合技术>>所说:
a.通过Delphi的控件TOleContainer 将Word嵌入
这是最简单的Ole嵌入,能够直接将Word文档调用,只需要使用ToleContainer.Run就可以将Word文档直接启动。且这样启动的Word文档与Delphi程序是一个整体(从界面上看),但是它存在不可克服的缺点,即不能通过Delphi控制Word文档,也就不能实现将灵活操纵Word的目的。b.使用Delphi提供的Servers控件调用Word,使用Word的属性
使用Delphi的Servers控件来操纵Word,在编程时Delphi能够实现代码提示,总体上看能够较好的实现Delphi对Word的控制,但是还有一些Word的功能不能在Delphi中调用(比如自己编写的VBA宏代码)。且实现功能时本来在VBA代码中可选则参数在Delphi调用的时候必须添加,否则,连编译都不能通过。 !!本方式启动的Word与Delphi程序分属两个窗体。!! 此办法仅能作为一个参考。c.通过真正的Com技术,将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中,利用Com技术编程利用真正的Com技术,将MsWord9.OLD文件类库导入,然后利用Com技术进行使用。整体上类似使用Delphi的Servers控件,稍微比Servers控件麻烦,优缺点与Servers控件相同。d.使用CreateOleObject将启动Word,然后以Ole方式对Word进行控制。
本办法是使用以CreateOleObjects方式调用Word,实际上还是Ole,但是这种方式能够真正做到完全控制Word文件,能够使用Word的所有属性,包括自己编写的VBA宏代码。与Servers控件和com技术相比,本方法能够真正地使用Word的各种属性,和在VBA中编写自己的代码基本一样,可以缺省的代码也不需要使用。 !!本方式启动的Word与Delphi程序分属两个窗体!! 缺点是使用本方法没有Delphi代码提示,所有异常处理均需要自己编写,可能编写时探索性知识比较多。不知用什么办法能够实现,像通过Delphi的控件TOleContainer 将Word嵌入到窗体,又可以通过delphi对嵌入到窗体中的word文档进行操作。
请高手大虾们指点,谢谢,祝大家中秋愉快,身体健康:)
我已经试过一些方法也查过很多资料,正如一片文章<<Delphi与Word之间的融合技术>>所说:
a.通过Delphi的控件TOleContainer 将Word嵌入
这是最简单的Ole嵌入,能够直接将Word文档调用,只需要使用ToleContainer.Run就可以将Word文档直接启动。且这样启动的Word文档与Delphi程序是一个整体(从界面上看),但是它存在不可克服的缺点,即不能通过Delphi控制Word文档,也就不能实现将灵活操纵Word的目的。b.使用Delphi提供的Servers控件调用Word,使用Word的属性
使用Delphi的Servers控件来操纵Word,在编程时Delphi能够实现代码提示,总体上看能够较好的实现Delphi对Word的控制,但是还有一些Word的功能不能在Delphi中调用(比如自己编写的VBA宏代码)。且实现功能时本来在VBA代码中可选则参数在Delphi调用的时候必须添加,否则,连编译都不能通过。 !!本方式启动的Word与Delphi程序分属两个窗体。!! 此办法仅能作为一个参考。c.通过真正的Com技术,将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中,利用Com技术编程利用真正的Com技术,将MsWord9.OLD文件类库导入,然后利用Com技术进行使用。整体上类似使用Delphi的Servers控件,稍微比Servers控件麻烦,优缺点与Servers控件相同。d.使用CreateOleObject将启动Word,然后以Ole方式对Word进行控制。
本办法是使用以CreateOleObjects方式调用Word,实际上还是Ole,但是这种方式能够真正做到完全控制Word文件,能够使用Word的所有属性,包括自己编写的VBA宏代码。与Servers控件和com技术相比,本方法能够真正地使用Word的各种属性,和在VBA中编写自己的代码基本一样,可以缺省的代码也不需要使用。 !!本方式启动的Word与Delphi程序分属两个窗体!! 缺点是使用本方法没有Delphi代码提示,所有异常处理均需要自己编写,可能编写时探索性知识比较多。不知用什么办法能够实现,像通过Delphi的控件TOleContainer 将Word嵌入到窗体,又可以通过delphi对嵌入到窗体中的word文档进行操作。
请高手大虾们指点,谢谢,祝大家中秋愉快,身体健康:)
解决方案 »
- 关于文件结构(多个jpg图片存贮)的定义/
- delphi中用Qreport时如何在打印一张单据时,记录不足时表格线填充至一页,
- 高分请教: nmftp中如何直接打开FTP中的文件而不用下载后再打开
- 不用webbrowser得到网页源代码
- 第三方控件的问题(急急!)
- dbedit的编辑?
- 问两个问题
- 如何让DELPHI程序更小些???(外加一个小问题)
- 高手帮忙啊,我顶不住了(来者有分啊)
- (在线等待)!!如何解决出现“ [DBNETLIB] [Connection Open (connect()).)] Sql Server doesnot exist or access denied” 的问题
- 做人要讲信用!请 fei19790920(饭桶超人II(抵制日货)) 进!
- 图像倒置问题(有代码,RGB)
只是没那么直接罢了,比如下面的函数可以获取TOleContainer内Word文档的总页数:function TfmEditWord.GetDocumentPageCount:Integer;
var
app, sel, page : Variant;
begin
Result:=-1;
try
app:=TOleContainer1.OleObject.Application;
sel:=app.Selection;
page:=sel.Information[wdNumberOfPagesInDocument];
Result:=StrToIntDef(VarToStr(page),-1);
except
;
end;
end;
shellexecute 这个函数驱动本地就可以了
使用TOleContainer控件,delphi不能直接操作创建word文档,向里面添加内容,我的目的是使用Servers控件页中的word相关控件来直接操纵创建的Word文档。