xlwings: не поддерживает запись файлов .xlsm?

Я попробовал простой тест с использованием «xlwings_0.3.4», чтобы открыть файл excel .xltm и снова сохранить его, чтобы убедиться, что модули VBA сохранены. Я не мог заставить его работать.

Если я укажу расширение файла на этапе сохранения, файл будет сохранен как файл .xlsx. Модуль сохраняется, но с изменением расширения он не распознается как допустимый модуль VBA. Если я не укажу расширение файла, оно автоматически сохраняется как .xlsx:

WB=xlwings.Workbook('template.xltm')
WB.save('outfile')
WB.close()

Это дает файл xlsx.

Попытка установить файл в xlsm приводит к ошибке:

WB.save('outfile.xlsm')
WB.close()
xl_workbook.SaveAs(path)

выдаст ошибку:

xl_workbook.SaveAs(path)
File "<COMObject Open>", line 7, in SaveAs
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft          Excel', u'This extension can not be used with the selected file type. Change the   file extension in the File name text box or select a different file type by changing the Save as type.', u'xlmain11.chm', 0, -2146827284), None)

Кажется, это присуще объекту приложения, возвращаемому GetActiveObject('Excel.Application').

Есть ли переключатель (например, переключатель 'keep_VBA=True' в openpyxl?) или невозможно сохранить файлы xlsm с помощью xlwings?


person BPT    schedule 22.04.2015    source источник


Ответы (1)


Что вы пытаетесь сделать с xl_workbook.SaveAs(path)?

Следующие работы:

>>> from xlwings import Workbook
>>> wb = Workbook(r'C:\full\path\to\file.xlsm')
>>> wb.save('new_name.xlsm')

Без указания полного имени при сохранении он в настоящее время (v0.3.4) сохраняет его в каталоге Excel по умолчанию, который, вероятно, следует улучшить, чтобы он был текущим рабочим каталогом Python, чтобы соответствовать тому, что он делает с новым файлом.

Обратите внимание, что после сохранения книги под новым именем wb выше по-прежнему относится к старому файлу, поэтому wb.close() не повлияет на новый файл. Это также следует улучшить, чтобы Workbook.save() возвращал новый объект Workbook. Я открою вопросы на странице GitHub, чтобы рассказать об этих улучшениях.

person Felix Zumstein    schedule 23.04.2015
comment
Да, это действительно работает с файлами .xlsm. Однако я пытался использовать определенные файлы шаблонов (.xltm). По-видимому, поведение Excel по умолчанию при открытии файла шаблона заключается в установке метода сохранения в .xlsx (вместо .xlsm). Таким образом, открытие шаблона (.xltm) предотвращает сохранение в виде файла с поддержкой макросов (.xlsm). Обходной путь — не использовать файл шаблона (достаточно простой, но не очень общий). Поскольку это поведение интерфейса win32com.client для Excel, а не самого xlwings, я поищу там правильный подход. Добавление чека в xlwings выглядит очень просто. - person BPT; 23.04.2015
comment
ах - извините - пропустил, т.е. - person Felix Zumstein; 23.04.2015
comment
Посмотрите здесь (это также должно быть добавлено в xlwings): stackoverflow.com/questions/21306275/ - person Felix Zumstein; 23.04.2015