如何使用Excel Interop保存/覆盖现有的Excel文件 – C#

有没有办法通过excel互操作保存到Excel电子表格(在这种情况下,我正在添加一个工作表),而没有提示用户,如果他们想覆盖现有的文件的变化。 我不希望用户甚至看到我的应用程序中打开的电子表格,所以有一个消息框popup,询问他们是否要覆盖文件似乎很不合适,可能会混淆用户。

我正在使用workbook.SaveAs(fileloaction)方法。

这里是我正在初始化excel互操作的COM参考对象。

private Excel.Application app = null; private Excel.Workbook workbook = null; public Excel.Workbook Workbook { get { return workbook; } set { workbook = value; } } private Excel.Worksheet worksheet = null; private Excel.Range workSheet_range = null; 

下面是我用来closures/保存excel文件的代码。 workbook.close()方法行是据报道引发未处理的exception。

  workbook.Close(true, startForm.excelFileLocation, Missing.Value); Marshal.ReleaseComObject(app); app = null; System.GC.Collect(); 

基本上,所有你需要的是ExcelApp.DisplayAlerts = False – 这是我怎么做,但:

 ExcelApp.DisplayAlerts = False ExcelWorkbook.Close(SaveChanges:=True, Filename:=CurDir & FileToSave) 

希望这可以帮助

只有这个代码将要求停止覆盖警报或模板已经在使用

ExcelApp.DisplayAlerts = False

我知道这是一个老post,但我想分享一个方法来做这个工作,而不会在未来造成可能的挫折。

首先我不喜欢使用:ExcelApp.DisplayAlerts = False

设置这个标志将在excel文件中设置这个属性,而不仅仅是在你的程序中。 这意味着,如果用户对文件进行了更改并将其closures(通过单击X),则不会提示他们保存该文件,并且稍后会导致沮丧。 它也将禁用Excel通常会发布的任何其他提示。

我喜欢在保存之前检查文件是否存在:

  if (File.Exists(SaveAsName)) { File.Delete(SaveAsName); }