在编程时候常常需要访问Word文档除了使用DDE的外PowerBuilder还有种操作Word方式就是通过OLEObjcet和OLEControl
OLEObject是不可视OLE对象而OLEControl则是可视窗口Control控件由于OLEObject较后者更灵活方便如果不是必须在窗口上显示Word文档内容使用前者是更好选择
开发员在使用OLE连接Word文档时候常常遇到这样两个问题:
第:如果某文档已经打开再使用时候会产生运行;
第 2:经常发现创建WinWord.exe进程没有能够正常终止
2 分析
下面我们来分析这两个产生原因
对于第个往往是由于使用OLEObjectVar.ConnectToObject(“<FileName>”)时候<FileName>这个文件已经打开了此时使用ConnectToObject会造成
对于第 2个般是使用 OLEObjectVar.ConnectToNewObject (“Word. Application”) 创建了新Winword.exe进程但是没有执行关闭这个新应用操作
3 解决
经过分析我们可以确定了如何解决PBWord问题
打开文档
首先我们使用<OLEObjectVar>.ConnectToObject(“<WordFileName>”)来打开个空Word文档打开成功后使用<OLEObjectVar>.Application获得对Word.Application引用并设置Applicatin.Visible=TRUE并关闭刚才打开空文档;
然后使用Word.ApplicationOpen思路方法打开要使用文档
这样思路方法打开文档如果当前有正在运行Windows.exe进程就不必打开新进程而是使用当前进程并且可以成功地对当前进程获得引用
关闭文档
首先我们关闭打开使用文档;
然后判断Application是否还有其他打开文档如果没有其他打开文档则ApplicationQuit思路方法让Application退出结束Winword.exe进程如果确定以后还经常Word也可以不关闭Winword.exe进程这样可以每次很快打开Word文档
4 注意事项
由于通过OLEObjectWord等Office有许多限制尽管这个思路方法能够解决许多问题但是还是有许多需要特别注意地方
第使用ConnectToObject连接文档不能被锁定(比如被以前进程打开或者被当作模板新建立了个文档都可能锁定)否则将会产生未知(返回值-9);
第 2对Document各种操作要保证Word.Application.Visible=TRUE否则可能会产生
最新评论