2014-01-23 52 views
0

當我現在嘗試保存一個XLSM文件,像這樣:Pywin32保存爲XLSM文件,而不是XLSX

from win32com.client import Dispatch 

# Open Excel workbook 
xl = Dispatch("Excel.Application") 
wb = xl.Workbooks.Add(r"C:\Users\ryan\Desktop\Book1.xlsm") 

# Make some changes 
# blah blah blah 

# Save the workbook in XLSM format with new name 

wb.SaveAs(r"C:\Users\ryan\Desktop\Book1 - XLSM.xlsm") 
xl.Quit() 

我提示以下錯誤......

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<COMObject Add>", line 7, in SaveAs 
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel' 
, 'This extension can not be used with the selected file type. Change the file e 
xtension in the File name text box or select a different file type by changing t 
he Save as type.', 'xlmain11.chm', 0, -2146827284), None) 

如何保存作爲一種新的文件格式?

注意:當嘗試將已經是XLSM的文件保存爲XLSM時,會導致相同的錯誤。

回答

2

該文件的格式由您在致電SaveAs時指定的參數FileFormat決定。由於您未指定值,因此選擇了.xlsx的默認值。 documentation列出了可能的值。您需要使用xlOpenXMLWorkbookMacroEnabled

的代碼將是:

xlOpenXMLWorkbookMacroEnabled = 52 
.... 
wb.SaveAs(filename, FileFormat=xlOpenXMLWorkbookMacroEnabled) 
+0

感謝促成這一點。是的,我在發佈問題後不久就想到了這一點,但我只是使用數字52作爲文件格式,而不是鍵入整個「xlOpenXMLWorkbookMacroEnabled」。 – ryansin

+0

你也可以像win32com一樣使用win32com的枚舉:''win32com.client.constants.xlOpenXMLWorkbookMacroEnabled'' – chip