JACOB:无法从MS Word获取信息属性

时间:2013-01-02 16:56:54

标签: java com ms-word jacob

我目前正在使用这个伟大的工具雅各布,但我得到一些非常奇怪的东西。读取MS Word文件,我对文档进行了标记,并且对于我得到的每个标记,我还想要页面和行号。 奇怪的是,它只有在我自己启动MSWord并从Jacob获取实例时才有效。如果Java启动一个新实例,我无法获取这些信息。另一点是我从文件中获取了很多信息,这很有效,所以似乎唯一的麻烦就是处理信息属性。

我的部分代码是:

ActiveXComponent myApplication = ActiveXComponent.connectToActiveInstance("Word.Application");
if (myApplication == null) {
  myApplication = new ActiveXComponent("Word.Application");
}
Dispatch myDocuments = myApplication.getProperty("Documents").toDispatch();
Dispatch myDocument = getOpenedDocument(myDocuments, pFilePath);

...

Dispatch myParagraphs = Dispatch.call(myDocument, "Paragraphs");
Dispatch myParagraph = Dispatch.call(myParagraphs, "Item", new Variant(1)).toDispatch();
Dispatch myParagraphRange = Dispatch.get(myParagraph, "Range").toDispatch();

然后以我的尝试为例:

myText = Dispatch.get(myParagraphRange, "Text").toString();

我得到段落内容。但是:

int myPageNumber = Dispatch.call(myParagraphRange, "Information", 3).getInt();

如果只有我自己没有启动MSWord,我得到:

com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: Information
Description: Le serveur a généré une exception.

似乎“信息”属性在使用Word ???

时出现问题

1 个答案:

答案 0 :(得分:0)

最后找到我的代码有什么问题。 对于未知的准备,对于要获取的属性信息,不应强制文档不可见。 使用

打开文档时
Dispatch.call(lObjDocuments, "Open", myPath, new Variant(false)....");

我的上一个参数涉及Word进程的可见性。刚删除它,它的工作原理(感谢Microsoft)