Pywin32 Сохранение в виде файла XLSM вместо XLSX

Когда я сейчас пытаюсь сохранить файл XLSM следующим образом:

from win32com.client import Dispatch

# Open Excel workbook
xl = Dispatch("Excel.Application")
wb = xl.Workbooks.Add(r"C:\Users\ryan\Desktop\Book1.xlsm")

# Make some changes
# blah blah blah

# Save the workbook in XLSM format with new name

wb.SaveAs(r"C:\Users\ryan\Desktop\Book1 - XLSM.xlsm")
xl.Quit()

Мне выдается следующая ошибка...

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<COMObject Add>", line 7, in SaveAs
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel'
, 'This extension can not be used with the selected file type. Change the file e
xtension in the File name text box or select a different file type by changing t
he Save as type.', 'xlmain11.chm', 0, -2146827284), None)

Как сохранить в новом формате файла?

Примечание. Это вызывает ту же ошибку при попытке сохранить файл, который уже был XLSM, как XLSM.


person ryansin    schedule 23.01.2014    source источник


Ответы (1)


Формат файла определяется параметром FileFormat, который вы указать при вызове SaveAs. Поскольку вы не указываете значение, выбирается значение по умолчанию .xlsx. В документации перечислены возможные значения. Вам нужно использовать xlOpenXMLWorkbookMacroEnabled.

Код будет:

xlOpenXMLWorkbookMacroEnabled = 52
....
wb.SaveAs(filename, FileFormat=xlOpenXMLWorkbookMacroEnabled)
person David Heffernan    schedule 23.01.2014
comment
Спасибо за вклад в это. Да, я понял это вскоре после публикации вопроса, но я просто использовал номер 52 в качестве формата файла вместо того, чтобы вводить весь xlOpenXMLWorkbookMacroEnabled. - person ryansin; 24.01.2014
comment
Вы также можете использовать перечисления из win32com, например: win32com.client.constants.xlOpenXMLWorkbookMacroEnabled - person chip; 02.10.2015