【问题标题】:How to Save/Overwrite existing Excel file with Excel Interop - C#如何使用 Excel Interop - C# 保存/覆盖现有 Excel 文件
【发布时间】:2012-10-14 20:33:10
【问题描述】:

有没有办法通过 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();

【问题讨论】:

    标签: c# excel excel-interop


    【解决方案1】:

    基本上,您只需要 ExcelApp.DisplayAlerts = False - 不过我是这样做的:

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

    希望对你有帮助

    【讨论】:

    • 非常感谢它成功了!如果现在我能找到一种方法来关闭它,就像你在上面所做的那样,而不会导致我的 c# 应用程序抛出未处理的异常并崩溃。保存并关闭excel文件后我也无法关闭应用程序。它需要保持打开状态。
    • 你能发布一些代码吗(或者如果它不适合这个问题,或者用该代码发布一个新问题)......这看起来很奇怪,我敢肯定,很容易修复...... .
    • 我已经用一些代码更新了帖子。如果您需要更多,请告诉我。我已经发布了关于这个问题的多个线程,尝试了几个解决方案,但还没有能够关闭/保存 excel 工作簿而不会引发未处理的异常并使 c# 应用程序崩溃。
    • 此外,未处理的异常表示“调用的对象已与其客户端断开连接。”
    • 我肯定需要更多的代码......我想知道的第一件事是它是否与 startForm.excelFileLocation 有关 - 您是否尝试使用字符串更改它只是一个文件位置? - 我想知道这是否与线程问题有关......无论哪种方式,更多的代码都会帮助我们......
    【解决方案2】:

    只有此代码需要停止覆盖警报或模板已在使用中

    ExcelApp.DisplayAlerts = False

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

      • 不,我尝试在这里进行更改并关闭而不保存,并且 Excel 提示保存文件,您的方式也可以,但不像第一个那样简单。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2014-09-29
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多