Python与Excel:尽管设置了XlSaveConflictResolution,覆盖现有文件仍提示确认
我在用Python程序通过Excel.Application这个工具打开一个CSV文件,然后把它保存成Excel工作簿。如果目标文件已经存在,系统会弹出一个提示:“这个位置已经有一个名为‘...’的文件。你想要替换它吗?”尽管我已经把XlSaveConflictResolution的值设置为xlLocalSessionChanges,这个设置本来是应该自动覆盖文件而不弹出提示的——我原以为是这样。
我使用的是Microsoft Office Excel 2007(版本12.0.6535.5002)SP2 MSO和ActivePython 2.6.5.14。我尝试了所有三种XlSaveConflictResolution的值,使用了常量和整数,但没有尝试不同版本的Excel。
这里有一段代码示例:
import win32com.client
xl = win32com.client.gencache.EnsureDispatch("Excel.Application")
wb = xl.Workbooks.Open(r"C:\somefile.csv")
wb.SaveAs(r"C:\somefile.xls", win32com.client.constants.xlWorkbookNormal, \
None, None, False, False, win32com.client.constants.xlNoChange, \
win32com.client.constants.xlLocalSessionChanges)
还有关于Excel工作簿对象的SaveAs方法的微软说明:http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas(VS.80).aspx
这可能是Excel 2007的新“功能”,还是我做错了什么呢?
1 个回答
21
在保存文件之前,把 DisplayAlerts
设置为 False
,这样可以关闭警告对话框:
xl.DisplayAlerts = False
文件保存后,通常最好把 DisplayAlerts
再设置回 True
:
xl.DisplayAlerts = True