1 引言
在编程的时候,常常需要访问 Word 文档。除了使用 DDE 之外, PowerBuilder 还有一种操作 Word 的方式,就是通过 OLEObjcet 和 OLEControl 。
OLEObject 是不可视的 OLE 对象,而 OLEControl 则是可视的窗口控件。由于 OLEObject 较后者更灵活方便,如果不是必须在窗口上显示 Word 文档内容,使用前者是更好的选择。
程序开发员在使用 OLE 连接 Word 文档的时候,常常遇到这样两个问题:
第一:如果某文档已经打开,再使用程序调用的时候,会产生程序运行错误;
第二:经常发现创建的 WinWord.exe 进程没有能够正常终止。
2 分析
下面我们来分析这两个错误产生的原因。
对于第一个错误,往往是由于使用 OLEObjectVar.ConnectToObject(“
1<filename>”) 的时候, <filename> 这个文件已经打开了。此时使用 ConnectToObject 会造成错误。
2
3对于第二个错误,一般是使用 OLEObjectVar.ConnectToNewObject (“Word. Application”) 创建了新的 Winword.exe 进程,但是没有执行关闭这个新的应用的操作。
4
5# 3 解决
6
7经过分析,我们可以确定了如何解决 PB 调用 Word 的程序的问题。
8
9** 打开文档 **
10
11首先,我们使用 <oleobjectvar>.ConnectToObject(“<wordfilename>”) 来打开一个空 Word 文档。打开成功后,使用 <oleobjectvar>.Application 获得对 Word.Application 的引用并设置 Applicatin.Visible=TRUE ,并关闭刚才打开的空文档;
12
13然后,使用 Word.Application 的 Open 方法打开要使用的文档。
14
15这样的方法打开文档,如果当前有正在运行的 Windows.exe 进程,就不必打开新的进程,而是使用当前的进程,并且可以成功地对当前的进程获得引用。
16
17** 关闭文档 **
18
19首先,我们关闭程序打开的使用的文档;
20
21然后判断 Application 是否还有其他的打开的文档。如果没有其他打开的文档,则调用 Application 的 Quit 方法,让 Application 退出,结束 Winword.exe 的程序进程。如果确定以后还经常的调用 Word ,也可以不关闭 Winword.exe 的进程,这样可以每次很快的打开 Word 的文档。
22
23# 4 注意事项
24
25由于通过 OLEObject 调用 Word 等 Office 有许多限制。尽管这个方法能够解决许多问题,但是还是有许多需要特别注意的地方
26
27第一, 使用 ConnectToObject 连接的文档,不能被锁定(比如被以前的进程打开,或者被当作模板新建立了一个文档,都可能锁定),否则将会产生未知错误(返回值 -9 );
28
29第二, 对 Document 的各种操作,要保证 Word.Application.Visible=TRUE ,否则调用可能会产生程序错误。</oleobjectvar></wordfilename></oleobjectvar></filename></filename>