尝试关闭电子表格时,Excel会询问用户是否保存更改

时间:2015-02-10 04:42:33

标签: c# excel epplus

我们使用EPPlus为Excel电子表格生成大量报告。

通常代码如下:

var workbookFile = new FileInfo(reportFile);
using (var excel = new ExcelPackage(workbookFile))
{
    var wb = excel.Workbook;
    var ws = wb.GetCleanWorksheet("Report");
    ws.Select();

    // write data to sheet
    ws.Cells[1, 1].Value = "foo";

    excel.Save();
}

当用户打开电子表格时,一切看起来都很好。当他们尝试关闭电子表格而未进行任何更改时,Excel会询问他们是否要保存更改。这不是什么大不了的事,但它令人烦恼并且有点担心。

我在OpenXML SDK Productivity Tool中打开了电子表格,然后通过验证。

5 个答案:

答案 0 :(得分:6)

以下是微软支持部门在http://support.microsoft.com/kb/213428处回答的类似问题的回复 “要在不保存任何更改的情况下强制关闭工作簿,请在该工作簿的Visual Basic模块中键入以下代码:

Sub Auto_Close()

ThisWorkbook.Saved = True

End Sub

由于Saved属性设置为True,因此Excel会像保存工作簿一样进行响应,并且自上次保存以来未发生任何更改。“

希望有所帮助。

答案 1 :(得分:2)

使用EPPlus保存文件后,一种解决方案是使用Interop Excel进行忍者风格的开放式保存关闭。类似的东西:

using Excel = Microsoft.Office.Interop.Excel;

var workbookFile = new FileInfo(reportFile);
using (var excel = new ExcelPackage(workbookFile))
{
    var wb = excel.Workbook;
    var ws = wb.GetCleanWorksheet("Report");
    ws.Select();

    // write data to sheet
    ws.Cells[1, 1].Value = "foo";

    excel.Save();
}
Excel.Application _Excel = null;
Excel.Workbook WB = null;
try
{

    _Excel = new Microsoft.Office.Interop.Excel.Application();
    WB = _Excel.Workbooks.Open(reportFile);
    _Excel.DisplayAlerts = false;
    WB.Close(true);
}
catch (Exception ex)
{
    WB.Close(false);
}
finally
{
    GC.Collect();
    GC.WaitForPendingFinalizers();
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WB);
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_Excel);
}

答案 2 :(得分:2)

我不确定EPPLus,但Excel Interop会让你静音这些警报。

var xlApp = new Excel.Application();
xlApp.DisplayAlerts = false;
然后,

Excel将选择默认响应。

答案 3 :(得分:1)

尝试升级到最新版本。从版本4.0.4.0开始,简单的工作表似乎不是问题。但语法略有不同:

var workbookFile = new FileInfo(reportfile);
using (var excel = new ExcelPackage(workbookFile))
{
    ExcelWorksheet ws = excel.Workbook.Worksheets.Add("Report");
    ws.Cells[1, 1].Value = "foo";
    excel.Save();
}

Excel不要求我保存任何东西(除非我改变了一些东西)。请注意,由于文件未运行Excels DOM,因此在复杂的工作簿中仍然可以看到您所看到的行为,因为Excel将应用自己的格式,但我不再在简单的工作表中看到它。

答案 4 :(得分:1)

转动" DisplayAlerts"关闭时关闭。这可以使用集成的VBA脚本完成。只需添加以下代码(workbook是您当前的工作簿):

workbook.CreateVBAProject();
workbook.CodeModule.Name = "DisplayAlertsOff";
StringBuilder sb = new StringBuilder();
sb.AppendLine("Sub CloseBook()");
sb.AppendLine("    Application.DisplayAlerts = False");
sb.AppendLine("    ActiveWorkbook.Close");
sb.AppendLine("    Application.DisplayAlerts = True");
sb.AppendLine("End Sub");
workbook.CodeModule.Code = sb.ToString();