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();
4

3 回答 3

57

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

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

希望这可以帮助

于 2012-10-24T18:29:04.200 回答
8

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

ExcelApp.DisplayAlerts = False

于 2013-08-29T05:57:42.137 回答
1

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

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

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

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

        if (File.Exists(SaveAsName))
        {
            File.Delete(SaveAsName); 
        }
于 2015-11-19T14:27:26.810 回答