Я пробовал простой тест с помощью «xlwings_0.3.4», чтобы открыть файл excel .xltm и сохранить его снова, чтобы убедиться, что модули VBA сохранены. Я не мог заставить его работать."xlwings": не поддерживает запись файлов .xlsm?
Если я дам расширение файла на этапе сохранения, файл сохраняется как файл .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?
Да, это действительно работает с файлами .xlsm. Тем не менее, я пытался использовать определенные файлы шаблонов (.xltm). По-видимому, поведение Excel по умолчанию при открытии файла шаблона заключается в том, чтобы установить метод «save» в .xlsx (вместо .xlsm). Таким образом, открытие шаблона (.xltm) предотвращает сохранение в качестве файла с поддержкой макроса (.xlsm). Обходной путь заключается в том, чтобы не использовать файл шаблона (достаточно простой, но не очень общий). Поскольку это поведение интерфейса win32com.client для Excel, а не xlwings, я посмотрю там, где будет правильный подход. Добавление проверки на xlwings выглядит очень легко. – BPT
ах - извините - пропустил это "t". –
Посмотрите здесь (это также следует добавить в xlwings): http://stackoverflow.com/questions/21306275/pywin32-saving-as-xlsm-file-instead-of-xlsx –