0

我尝试使用“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 中的开关?),还是不能用 xlwings 保存 xlsm 文件?

4

1 回答 1

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 页面上打开问题以涵盖这些改进。

于 2015-04-23T09:59:41.290 回答