2017-03-14 9 views
0

にこのコードをCOMオブジェクトのプロパティにアクセスしようとすると、動作していないとき:クラスExcelを使用してエラーPOINTER(IUnknownの)Pythonで

Traceback (most recent call last): 
File "<pyshell#5>", line 1, in <module> 
doc = word.Documents.Open("test.docx") 
AttributeError: 'POINTER(IUnknown)' object has no attribute 'Documents' 

同様のコード:

from comtypes import client 
word = client.CreateObject("Word.Application") 
word.Documents.Open("C:\\test.docx") 

私は、このエラーメッセージが表示されます。アプリケーションも同じ種類のエラーを示します。別のテストInternetExplorer.Applicationが働いた。だから、Officeの問題だと思われる。

また、同じコードをVBScriptでテストして作業しました。

コードはWindows7-64bitsおよびOffice 2013で動作します。動作していないコンピュータはWindows10-64bitsおよびOffice 365です。両方のコンピュータのPythonバージョンは3.6-64bitsです。

+0

オブジェクトが実行状態でないことが原因で、ドキュメントプロパティへの呼び出しが失敗することがあります。 WinAPI関数OleRun(word)を呼び出すと、オブジェクトが実行状態にあることが保証されます。 OTOH、私が知っているすべてに対して同じことをするPython関数があるかもしれません。 –

+0

@JoeWillcoxsonありがとうございますが、私はPythonやWinAPIの専門家ではありません – Tripanosomagambiense

答えて

0

これは良い解決策ではありませんが、私はそれと一緒に暮らすことができると思います。私は今、このコードを使用しています:

from comtypes import client 
word = client.CreateObject("Word.Application", dynamic = True) 
word.Visible = True 
word.Documents.Open("test.docx") 
word.Documents[0].SaveAs("test.pdf", 17) 
word.Documents[0].Close() 

重要なのは、word.Visible = True行とdynamic = Trueパラメータです。それらなしでドキュメントコレクションが見つかりません。

関連する問題