java - 雅各布 : cannot get Information property from MS Word

标签 java com ms-word jacob

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

我的部分代码是:

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 的“信息”属性似乎有问题???

最佳答案

终于找到我的代码出了什么问题。 对于未知的准备,要获取属性信息,不应该强制文档不可见。 当您使用

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

我的最后一个参数涉及 Word 进程的可见性。只需删除它即可运行(感谢 Microsoft)

关于java - 雅各布 : cannot get Information property from MS Word,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14125954/

相关文章:

java - byte[]数组的长度

c# - COM 互操作对象在一个项目中抛出 InvalidCastException,但在其他项目中没有

vba - 在 excel 和 word 之间共享宏模块

c# - 在 word 文档中搜索/突出显示特定单词

java - 未选择案例时开关如何工作

java - 无法使用现有解决方案使 Fragment 中的 onClick 方法正常工作

java - 如何使用 Java Mail API 验证电子邮件和密码?

c++ - IUknown 派生接口(interface)上的虚拟析构函数

C# - 将 Nullable<T> 公开给 COM 的好方法

python - 获取两个 MSWord 文档文件的差异并输出到 html