Python 和 Excel:覆盖现有文件总是提示,尽管 XlSaveConflictResolution 值

Posted

技术标签:

【中文标题】Python 和 Excel:覆盖现有文件总是提示,尽管 XlSaveConflictResolution 值【英文标题】:Python and Excel: Overwriting an existing file always prompts, despite XlSaveConflictResolution value 【发布时间】:2011-03-23 09:12:58 【问题描述】:

我正在使用 Python 程序中的 Excel.Application COM 对象打开 CSV 文件并将其保存为 Excel 工作簿。如果目标文件已存在,则会提示我以下消息:“此位置已存在名为 '...' 的文件。您要替换它吗?”尽管我已将 XlSaveConflictResolution 值设置为 xlLocalSessionChanges,但仍会出现该消息,这应该会自动覆盖更改而不提示 - 或者我是这么认为的。

我正在使用 Microsoft Office Excel 2007 (12.0.6535.5002) SP2 MSO 和 ActivePython 2.6.5.14。我已经使用常量和整数尝试了所有三个 XlSaveConflictResolution 值。我没有尝试过不同版本的 Excel。

这是一个代码sn-p:

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)

以下是 Microsoft 关于 Excel 工作簿对象的 SaveAs 方法的规范:http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas(VS.80).aspx

这可能是 Excel 2007 中的一个新“功能”,还是我做错了什么?

【问题讨论】:

【参考方案1】:

在将文件集DisplayAlerts 保存为False 以抑制警告对话框之前:

xl.DisplayAlerts = False

文件保存后,通常最好将DisplayAlerts 设置回True

 xl.DisplayAlerts = True

【讨论】:

谢谢,史蒂文。这就像一个魅力。那么,如果 XlSaveConflictResolution 值不控制这种行为,那么它的目的是什么? @MikeM.Lin "指定每当更新共享​​>工作簿时解决冲突的方式"

以上是关于Python 和 Excel:覆盖现有文件总是提示,尽管 XlSaveConflictResolution 值的主要内容,如果未能解决你的问题,请参考以下文章

无法在不覆盖的情况下将 R 数据框附加到现有 Excel 中

如何在保留所有其他工作表的同时覆盖现有 Excel 工作表上的数据?

如何使用自动覆盖的workbook.saveas

VBA:保存而不覆盖现有文件

Linux下cp -rf总是提示覆盖的解决办法

Gradle Copy Task:如何覆盖现有文件?