Как импортировать пространство имен / перечисление 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. Вы также можете убедиться, что все будет работать в более контролируемой среде.