Python получает члены объекта COM ole

В python 3.6 я использую COM-интерфейс для связи с Excel и Word, в данном случае Word для автоматической отчетности, поскольку обработка данных выполняется в python.

Я не знаю, как python может получить членов такого COM-объекта, аналогичного использованию функции dir(). (Ранее используя Matlab, я бы использовал методы .get или .invoke, чтобы получить это)

Таким образом, код будет:

def wordOpen(wordfile):
    pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)    
    wApp = win32com.client.DispatchEx('Word.Application')
    wDoc = wApp.Documents.Open(wordfile)
    wApp.Visible = 1
    wApp.Activate
    wRange = wDoc.Content
    return wApp, wDoc, wRange

wApp, wDoc, wRange = wordOpen(wordfile)

dir(wDoc)

.. который не предоставляет мне список методов и свойств объекта документа Word (аналогично для wApp и wRange).

Точно так же я пробовал inspect.getmembers(wDoc), но это также не предоставляет список методов/свойств, которые я ищу.

Для того же при общении с Excel я раньше заходил в редактор VBA и получал там список, но есть ли способ сделать это напрямую из консоли IPython?


person Lendicap    schedule 09.06.2017    source источник


Ответы (1)


Погуглил еще и сам разобрался. В приведенном выше примере используется «динамическая диспетчеризация», а вместо этого мы хотим использовать «статическую диспетчеризацию». Это не меняет код, это влечет за собой только одноразовое действие.

Динамический — это быстрый и грязный способ создания этих объектов, и тогда python ничего не знает о типе объекта. Статический означает, что вам нужно запустить makepy.py из командной строки, чтобы создать библиотеку типов (в данном случае для объектов Word), и после того, как это было сделано один раз, python знает всю информацию об объекте каждый раз, когда он запускает COM-объект .

Процедура очень проста и сравнима с действием VBA по добавлению ссылок в ваш проект.

person Lendicap    schedule 19.06.2017