Доступ к константам перерассеяния в Excel COM с использованием Python и win32com

Я использую модуль python 2.7 win32com для загрузки листа MS Excel из Python:

book = xlApp.Workbooks.Open("myFile.xls") sheet = book.Sheets(1)

Многие методы и свойства Range, Worksheet и т.д. используют перечисления, такие как XlDirection, XlFillWith и т.д. Они определяют константы, такие как xlDown, xlUp, xlFillWithContents и т.д. Являются ли эти константы доступными для win32com, чтобы я мог это сделать, например:

column = outputsSheet.Range("I5:I150") lastRow = column.End(xlInterop.xlDown) print "Last row:", lastRow.Row

Это не работает, потому что xlInterop не определен, есть ли способ получить к нему доступ с помощью win32com? Обнаружение значений таких констант, как xlDown методом проб и ошибок, не очень практично.

2 ответа

Я новичок в win32com, поэтому я не знаю, помогает ли это... попытайтесь запустить Excel с помощью

xlApp = win32com.client.gencache.EnsureDispatch("Excel.Application")

Это должно запустить makepy, и вы можете найти некоторые результирующие файлы Python в... \Lib\site-packages\win32com\gen_py\00020813-0000-0000-C000-000000000046x0x1x7 (последняя папка может быть другим именем для вас, Я не знаю). Проверьте файл init.py, там определен ряд констант.

Изменить: вы можете получить доступ к этим константам с помощью:

from win32com.client import constants as c


Ответ Olav позволил мне выполнить поиск по ключевым словам "win32com gencache EnsureDispatch константы", и я нашел несколько полезных ссылок. Как Как импортировать пространство имен/перечисление объектов COM в Python?, которое мой вопрос дублирует. Это указывает на страницу ActiveState Быстрый старт на стороне клиента COM и Python с вступлением к этому материалу. Как ни странно, на этой странице указано, что client.Dispatch должен быть достаточным для получения констант, но я обнаружил, что это не так, мне пришлось запустить gencache.EnsureDispatch, только тогда появились константы:

Portable Python >>> from win32com import client as com
Portable Python >>> from win32com.client import constants as c
Portable Python >>> word = com.Dispatch('Word.Application')
Portable Python >>> c.wdWindowStateMinimize Traceback (most recent call last): File "<stdin>", line 1, in <module> File "F:\PORTAB~1.1\App\lib\site-packages\win32com\client\__init__.py", line 170, in __getattr__ raise AttributeError(a) AttributeError: wdWindowStateMinimize
Portable Python >>> word = com.gencache.EnsureDispatch("Word.Application")
Portable Python >>> c.wdWindowStateMinimize
2
</module></stdin>

licensed under cc by-sa 3.0 with attribution.