Как импортировать пространство имен / перечисление COM-объектов в Python? - PullRequest
8 голосов
/ 29 октября 2009

Я относительно новичок в программировании / 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 ]

10 голосов
/ 24 марта 2011

Этот вопрос немного устарел, но для тех, кто заходил на эту страницу из 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 полезной.

2 голосов
/ 30 октября 2009

Когда я использовал 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, которую вы разместили в своем вопросе.

1 голос
/ 30 октября 2009

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

0 голосов
/ 07 ноября 2009

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

...