私は現在、この優れたツール Jacob を使用していますが、非常に奇妙なことがわかりました。MS Word ファイルを読み込んで、ドキュメントをトークン化し、取得したトークンごとに、ページと行番号も取得したいと考えています。奇妙なことに、MSWord を自分で起動して、Jacob からインスタンスを取得した場合にのみ機能します。Java が新しいインスタンスを開始すると、これらの情報を取得できません。もう 1 つのポイントは、ファイルから多くの情報を取得し、それがうまく機能することです。そのため、唯一の問題は 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 の「情報」プロパティに問題があるようです???