Python和Excel:尽管有XlSaveConflictResolution值,覆盖现有文件始终会提示

问题描述:

我正在使用Python程序中的Excel.Application COM对象打开CSV文件并将其另存为Excel工作簿。如果目标文件已经存在,那么系统会提示此消息:“在此位置已存在一个名为'...'的文件,是否要替换它?”尽管事实上我已经设置了XlSaveConflictResolution值xlLocalSessionChanges,它应该会自动覆盖更改而不会提示 - 或者我想,这个消息会出现。Python和Excel:尽管有XlSaveConflictResolution值,覆盖现有文件始终会提示

我使用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) 

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

难道这是一个新的“功能”,在Excel 2007中,或我是否做错了什么?

保存文件前设置DisplayAlertsFalse相应的警告对话框:

xl.DisplayAlerts = False 

保存文件后,它通常是设置DisplayAlertsTrue一个好主意:

xl.DisplayAlerts = True 
+0

谢谢,史蒂文。这就像一个魅力。那么如果XlSaveConflictResolution值不控制这种行为,那么它的目的是什么? – 2010-07-30 20:43:37

+1

@ MikeM.Lin“指定每当*共享*工作簿更新时解决冲突的方式” – Winand 2016-04-29 06:29:27