Как импортировать пространство имен / перечисление COM-объектов в Python?

Я относительно новичок в программировании / Python, поэтому я был бы признателен за любую помощь, которую я могу получить. Я хочу сохранить файл Excel как определенный формат, используя Excel через COM. Вот код:

import win32com.client as win32 

def excel():
    app = 'Excel'
    x1 = win32.gencache.EnsureDispatch('%s.Application' % app)
    ss = x1.Workbooks.Add()
    sh = ss.ActiveSheet
    x1.Visible = True
    sh.Cells(1,1).Value = 'test write'
    ss.SaveAs(Filename="temp.xls", FileFormat=56)
    x1.Application.Quit()

if __name__=='__main__':
    excel()

У меня вопрос, как мне указать FileFormat, если я не знаю явно код для него? Просматривая документацию, я нахожу ссылку на объект FileFormat. Я не знаю, как получить доступ к объекту XlFileFormat и импортировать его таким образом, чтобы я мог найти для него значение перечисления.

Спасибо!

4 ответа

Этот вопрос немного устарел, но для тех, кто заходил на эту страницу из Google (как и я), моим решением был доступ к константам через win32com.client.constants объект вместо самого объекта приложения, как предложено Эриком. Это позволяет вам использовать константы перечисления, как в VBE:

>>> import win32com.client
>>> xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
>>> C = win32com.client.constants
>>> C.xlWorkbookNormal
-4143
>>> C.xlCSV
6
>>> C.xlErrValue
2015
>>> C.xlThemeColorAccent1
5

Кроме того, если вы вручную не запускаете makepy утилита, константы могут быть недоступны при инициализации приложения с обычным win32com.client.Dispatch(..) метод, который был другой проблемой, которую я имел. С помощью win32com.client.gencache.EnsureDispatch(..) (как и спрашивающий) проверяет и генерирует привязки Python во время выполнения, если это необходимо.

Я нашел эту страницу ActiveState, чтобы быть полезным.

Когда я использовал COM для доступа к быстрым книгам, я мог достичь констант, определенных в константе- члене объекта. Код выглядел примерно так (вы будете вставлены в третью строку):

self._session_manager.OpenConnection2("",
                                      application_name,
                                      QBFC8Lib.constants.ctLocalQBD)

Я не уверен, что это будет работать, но попробуйте это:

import win32com.client as win32 

def excel():
    app = 'Excel'
    x1 = win32.gencache.EnsureDispatch('%s.Application' % app)
    ss = x1.Workbooks.Add()
    sh = ss.ActiveSheet
    x1.Visible = True
    sh.Cells(1,1).Value = 'test write'
    ss.SaveAs(Filename="temp.xls", FileFormat=x1.constants.xlWorkbookNormal)
    x1.Application.Quit()

if __name__=='__main__':
    excel()

Замените xlWorkbookNormal любым форматом, который вы пытаетесь выбрать на веб-странице X1FileFormat, которую вы разместили в своем вопросе.

Все константы формата файла описаны здесь.

Как правило, я нахожу действительно полезным предварительно написать любой код в vba ide в Excel. Таким образом, вы можете узнать все значения констант и т. Д., Которые вам нужно использовать в вашем коде Python. Вы также можете убедиться, что все будет работать в более контролируемой среде.

Другие вопросы по тегам