2017-03-14 9 views
0

를 COM 개체의 속성에 액세스하려고 할 때 :오류 포인터 (의 IUnknown) 파이썬에서이 코드가 작동하지 않는

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") 

내가이 오류 메시지가 .Application
도 같은 종류의 오류를 제공합니다. InternetExplorer.Application의 다른 테스트가 효과적입니다. 그래서 그것은 Office의 문제로 보입니다.

또한 VBScript에서 동일한 코드를 테스트하여 작동했습니다.

이 코드는 Windows7-64bits 및 Office 2013에서 작동합니다. 작동하지 않는 컴퓨터는 Windows10-64bits 및 Office 365입니다. 두 컴퓨터의 Python 버전은 3.6-64bits입니다.

+0

개체가 실행 중 상태가 아니 어서 Documents 속성에 대한 호출이 실패하는 이유가 될 수 있습니다. 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 매개 변수입니다. 그들 없이는 문서 컬렉션을 찾을 수 없습니다.