Python与Excel:尽管设置了XlSaveConflictResolution,覆盖现有文件仍提示确认

10 投票
1 回答
16897 浏览
提问于 2025-04-16 02:04

我在用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

撰写回答