我試過用「xlwings_0.3.4」打開一個excel .xltm文件並再次保存,以確保VBA模塊保持在一個簡單的測試。我無法讓它工作。「xlwings」:不支持寫入.xlsm文件?
如果我在保存步驟中給出文件擴展名,則該文件將保存爲.xlsx文件。該模塊隨身攜帶,但隨着擴展的更改,它不會被識別爲有效的VBA模塊。如果我沒有指定文件擴展名,它會自動保存爲.xlsx:
WB=xlwings.Workbook('template.xltm')
WB.save('outfile')
WB.close()
這給出了一個xlsx文件。
嘗試設置該文件以XLSM生成錯誤:
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')
返回的應用程序對象:
WB.save('outfile.xlsm')
WB.close()
xl_workbook.SaveAs(path)
會產生錯誤。
是否有開關(如openpyxl中的'keep_VBA=True'
開關?),還是不能用xlwings保存xlsm文件?
是的,它的確可以使用.xlsm文件。但是,我試圖使用定義的模板文件(.xltm)。顯然,Excel在打開模板文件時的默認行爲是將「保存」方法設置爲.xlsx(而不是.xlsm)。因此,打開一個模板(.xltm)會阻止將其保存爲啓用宏的文件(.xlsm)。解決方法是不使用模板文件(很簡單,但不是很一般)。由於這是Excel的win32com.client接口的行爲,而不是xlwings本身,所以我會尋找正確的方法。將支票添加到xlwings看起來非常容易。 – BPT
啊 - 對不起 - 錯過了那個「t」。 –
看看這裏(這也應該加入到xlwings中):http://stackoverflow.com/questions/21306275/pywin32-saving-as-xlsm-file-instead-of-xlsx –