现在的位置: 首页 > 综合 > 正文

金山词霸2007给Word编程带来的一点小麻烦

2011年09月07日 ⁄ 综合 ⁄ 共 964字 ⁄ 字号 评论关闭

在安装了金山词霸2007的PC上执行.Net程序,在程序中调用Word2003的Com对象时会抛出异常。

在执行Word.Application word = new Word.Application();便会抛出ComException。

这是由于金山词霸2007安装后会讲一个文件名为PowerWord.dot的文件设置为Word2003的加载项,并在Word2003启动时自动加载。初始化Word.Application对象时,此对象的Documents中是空的,这时候这个PowerWord.dot就会Show出一个MessageBox提示什么"PowerWord.dot已被其他进程使用无法保存"。这时候由于这个MessageBox是实模式窗体,所以我们再调用大部分Word.Application对象的属性或方法时都会抛出异常。

我现在的解决方法如下:

首先,不直接new Word.Application(),而是先实例化一个Word.Document doc = new Word.Document。这时候,Word会自动选择一个现有的进程打开这个新的文档(如果没有现成的就新开一个Word进程),所以doc.Application并不是null。这时候我们定义Word.Application word = doc.Application。这样我们就绕过了PowerWord.dot给我们带来的麻烦了。

然后,我们绕过了第一个麻烦,但是带来了新的麻烦。现在的Word.Application对象并不一定是由我们的程序单独使用的(一个Word进程是可以打开多个文件的),而我们需要在做完相应的工作后关闭这个Word.Application对象。如果我们的客户在边用我们的程序边用Word看小说的话,他会发现他的小说自己关闭了。对于这个问题我没有找到比较好的办法,现在的解决方案是判断Word.Application对象的Visible属性,如果是false,那么我就关闭对象,否则只关闭Word.Document对象。

现在,还有几个问题没有弄明白。一个就是刚才所说的怎么合理关闭Word.Application对象的问题,另一个就是PowerWord.dot究竟是干什么用的,这个东西究竟在Word启动的时候干了什么?如果哪位达人知道,烦请高知。

抱歉!评论已关闭.