手工创建word对象的几个问题:

1898xxy 2001-09-17 08:51:16
下面是delphi中打开word文档的代码:
v_app:=CreateOleObject('Word.Application');
v_app.visible:=True;
v_app.Documents.open(s1,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
有三个问题请教:
<1>增加什么语句可以在word事先打开的情况下,不再创建word.Application,具体位置应该在什么地方?
<2>为什么我在最后增加v_app.free,执行后(已打开word)会报错,难道不须要销毁这个动态创建的对象吗?那样的话内存不是会被耗完??
<3>程序执行后,word也打开了,在word中所做的操作(如修改,关闭,保存),delphi程序能够及时知道吗?
我想在这个打开的word文件关闭时,打它保存到数据库中(ADOTable1blob.loadfromfile),所以我必须判断word文件到底是不是关闭了(或者说保存了)
分数不多(我只能给这么多了),希望各位能伸出援助之手,谢谢!
...全文
155 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloveling 2002-01-07
  • 打赏
  • 举报
回复
能和你们多交流吗?

E-MAIL:shenbingfly@sina.com
chechy 2001-09-17
  • 打赏
  • 举报
回复
procedure TForm1.Button2Click(Sender: TObject);
var
a: OleVariant;
begin
a := 'c:\a.doc';
WordApplication1.Connect;
WordApplication1.Visible := True;
WordApplication1.Documents.Open(a, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;
pathe 2001-09-17
  • 打赏
  • 举报
回复
不要用free;用 V_app := unassigned;
还有创建时可用:
if FindWindow('OpusApp','Microsoft Word') = 0 then
begin
v_app:=CreateOleObject('Word.Application');
v_app.visible:=True;
end;
1898xxy 2001-09-17
  • 打赏
  • 举报
回复
直接用TWordApplication,在打开文件时总是出错呀!!!
TWordApplication.connect;
TWordApplication.visible:=true;
TWordApplication.Documents.open(s1,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
编译都不能通过??所以我才手工创建的
Nizvoo 2001-09-17
  • 打赏
  • 举报
回复
对。同意楼上的
_______________________________________________________________

多多交流 共同进步
nizvoo@etang.com
http://nizvoo.myrice.com
_______________________________________________________________
chechy 2001-09-17
  • 打赏
  • 举报
回复
1、直接用Delphi的TWordApplication,上面有ConnectKind属性。
2、不要用Free,要用用v_app := nil;
3、TWordDocument有Close,New,Open三个事件。
chechy 2001-09-17
  • 打赏
  • 举报
回复
ckRunningOrNew应该是可以得。
程序中不需要赋值为nil,因为程序会替你释放的。
如果LoadFromFile,我觉得最好先关闭这个Word文档,否则可能读不出来。
1898xxy 2001-09-17
  • 打赏
  • 举报
回复
不行呀如果事先打开了一个word,执行这个delphi程序后还会打开另一个word;
程序中到底要不要WordApplication1:=nil来清除所占用的内存呢??
我想在关闭或者保存这个打开的word文档后,马上把它保存到数据库中,用ADOTable1blob.loadfromfile,应该可行吧


问完这个我就要加分了:)
chechy 2001-09-17
  • 打赏
  • 举报
回复
缺省的就可以了。
1898xxy 2001-09-17
  • 打赏
  • 举报
回复
原来我的文件变量没有设为OleVariant类型,而是设为string,所以用WordApplication总是出错错!!但我的第一个问题还是没有解决,ConnectKind属性到底选哪个才可以让'word事先打开的情况下不再打开一个新的word'呢?我试过了所有的选项;有几个报错,两个可以运行,但总会新打开一个word,即使先前已打开了一个word。
程序可以控制吗?另个程序中到底要不要WordApplication1:=nil来清除所占用的内存呢??

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧