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

时间:2012-10-24 18:24:01

标签: c# excel excel-interop

有没有办法通过excel互操作保存对excel电子表格的更改(在这种情况下,我正在向其添加工作表),而不会提示用户是否要用更改覆盖现有文件。我不希望用户甚至在我的应用程序中看到电子表格打开,因此弹出一个消息框询问他们是否要覆盖该文件似乎非常不合适并且可能使用户感到困惑。

我正在使用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;

以下是我用来关闭/保存excel文件的代码。 workbook.close()方法行是据报道抛出未处理异常的行。

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

3 个答案:

答案 0 :(得分:53)

基本上,你需要的只是 ExcelApp.DisplayAlerts = False - 这是我的工作方式,但是:

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

希望这有帮助

答案 1 :(得分:8)

只有此代码才会要求停止覆盖警报或模板已在使用

ExcelApp.DisplayAlerts = False

答案 2 :(得分:0)

我知道这是一篇很老的帖子,但是我想分享一种方法来完成这项工作而不会在将来造成挫败感。

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

设置此标志将在excel文件上设置此属性,而不仅仅是在程序中。这意味着如果用户对文件进行了更改并将其关闭(通过单击X),则不会提示他们保存文件,以后会引起挫败感。它还将禁用excel通常发布的任何其他提示。

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

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