Ошибка POINTER(IUnknown) при попытке доступа к свойствам COM-объекта

Этот код в Python не работает:

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

Я получаю это сообщение об ошибке:

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'

Подобный код, использующий класс Excel.Application, также дает такую ​​же ошибку. Еще один тест с InternetExplorer.Application сработал. Так что похоже проблема в Офисе.

Я также протестировал тот же код на VBScript и работал.

Код работает в Windows7-64bits и Office 2013. Компьютер, на котором он не работает, — Windows10-64bits и Office 365. Версия Python на обоих компьютерах — 3.6-64bits.


person Tripanosomagambiense    schedule 14.03.2017    source источник
comment
Возможно, объект не находится в рабочем состоянии, и поэтому вызов свойства Documents не выполняется. если вы вызываете функцию WinAPI OleRun(word), это гарантирует, что объект находится в рабочем состоянии. OTOH, насколько я знаю, может быть функция Python, которая делает то же самое.   -  person Joseph Willcoxson    schedule 16.03.2017
comment
Спасибо, @JoeWillcoxson, но я не эксперт ни в Python, ни в WinAPI.   -  person Tripanosomagambiense    schedule 16.03.2017


Ответы (1)


Это не очень хорошее решение, но я думаю, что смогу с этим жить. Я использую этот код сейчас:

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. Без них коллекция Документы не найдена.

person Tripanosomagambiense    schedule 16.03.2017