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

21
有没有办法通过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个回答

57

基本上,您所需的只是 ExcelApp.DisplayAlerts = False - 以下是我如何执行:

ExcelApp.DisplayAlerts = False
ExcelWorkbook.Close(SaveChanges:=True, Filename:=CurDir & FileToSave)
希望这有所帮助。

太棒了,谢谢,它起作用了!现在只要我能找到一种像你上面所做的那样关闭它的方法,而不会导致我的C#应用程序抛出未处理的异常并崩溃就好了。我也不能在保存和关闭Excel文件后关闭应用程序。它需要保持打开状态。 - user1546315
你能否发布一些代码(如果不适合这个问题,请发布一个新问题并包含该代码)...那似乎很奇怪,但我相信很容易修复... - John Bustos
我已经更新了帖子并添加了一些代码。如果您需要更多,请告诉我。我已经发布了多个关于这个问题的主题,尝试了几种解决方案,但是仍然无法在不抛出未处理的异常并崩溃C#应用程序的情况下关闭/保存Excel工作簿。 - user1546315
此外,未处理的异常显示“调用的对象已与其客户端断开连接。” - user1546315
我肯定需要更多的代码...我想知道的第一件事是它是否与 startForm.excelFileLocation 有关 - 你试过用一个文件位置的字符串来改变它吗?- 我在想这是否与线程问题有关...无论如何,更多的代码肯定会帮助我们解决问题... - John Bustos

8

仅需此代码即可停用覆盖警告或模板已在使用中。

ExcelApp.DisplayAlerts = False


1

我知道这是一篇旧文章,但我想分享一种方法,可以使此操作在不引起未来可能的困扰的情况下正常工作。

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

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

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

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

不好意思,我在这里尝试进行更改并关闭了文件而没有保存,Excel提示我保存文件。按照你的方法也可以工作,但不如第一个简单。 - Guilherme Golfetto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接