1

私は現在、この優れたツール 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 の「情報」プロパティに問題があるようです???

4

1 に答える 1

0

最後に、私のコードの問題点を見つけてください。未知の準備のために、プロパティ情報を取得するために、ドキュメントを強制的に非表示にする必要はありません。でドキュメントを開くと、

Dispatch.call(lObjDocuments, "Open", myPath, new Variant(false)....");

私の最後のパラメーターは、Word プロセスの可視性に関するものでした。削除しただけで動作します(Microsoftに感謝)

于 2013-01-03T14:40:23.580 に答える