2015-04-22 2 views
0

Я пробовал простой тест с помощью «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?

ответ

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() возвращает новый объект рабочей книги. Я открою проблемы на странице GitHub, чтобы охватить эти улучшения.

+0

Да, это действительно работает с файлами .xlsm. Тем не менее, я пытался использовать определенные файлы шаблонов (.xltm). По-видимому, поведение Excel по умолчанию при открытии файла шаблона заключается в том, чтобы установить метод «save» в .xlsx (вместо .xlsm). Таким образом, открытие шаблона (.xltm) предотвращает сохранение в качестве файла с поддержкой макроса (.xlsm). Обходной путь заключается в том, чтобы не использовать файл шаблона (достаточно простой, но не очень общий). Поскольку это поведение интерфейса win32com.client для Excel, а не xlwings, я посмотрю там, где будет правильный подход. Добавление проверки на xlwings выглядит очень легко. – BPT

+0

ах - извините - пропустил это "t". –

+0

Посмотрите здесь (это также следует добавить в xlwings): http://stackoverflow.com/questions/21306275/pywin32-saving-as-xlsm-file-instead-of-xlsx –