2013-01-02 51 views
1

我目前正在使用這個偉大的工具Jacob,但我得到了一些非常奇怪的東西。讀取一個MS Word文件,我將文檔標記爲文件,並且對於我獲得的每個令牌,我還希望擁有頁碼和行號。 奇怪的是,它只有在我自己啓動MSWord並從Jacob獲得實例時纔有效。如果Java啓動一個新實例,我無法獲得這些信息。另一點是我從文件中獲得很多信息,這很好,所以看起來好像唯一的麻煩就是處理信息屬性。我的代碼JACOB:無法從MS Word中獲取信息屬性

配件有:

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有問題???

回答

0

終於找到我的代碼有什麼問題。 對於未知的準備,對於要獲取的屬性信息,文檔不應強制爲不可見。 當您與

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

打開您的文檔我的最後一個參數有關的Word過程的可見性。剛剛刪除它,它的作品(謝謝微軟)