如何从C#关闭 - 不保存带有自定义函数的Excel/xlsm工作簿

Jac*_*ang 29 c# excel excel-interop

我有一个Excel工作簿,其中包含一个自定义的非时间依赖的单元格函数,我使用Interop.Excel从C#WindowsForms应用程序打开.我从中读取了四个值,不执行显式更改/计算,然后从C#中关闭它.

当我尝试直接关闭(不保存)时,我收到一个保存提示.我怀疑这是因为Excel在打开时将自动重新计算解释为创建更改,即使实际上没有任何数字或公式更改.我也定了Excel.Application.Calculation = Excel.XlCalculation.xlCalculationManual.如何阻止保存提示出现并且只是关闭而不保存?

Mot*_*tes 53

当您使用Excel对象时,请确保关闭工作簿,如下所示:

Excel.Application xlApp ;
Excel.Workbook xlWorkBook ;
Excel.Worksheet xlWorkSheet ;
object misValue = System.Reflection.Missing.Value;

xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add("Yourworkbook");

xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

....do your stuff

xlWorkBook.Close(false, misValue, misValue);

xlApp.Quit();
Run Code Online (Sandbox Code Playgroud)

close方法中的false表示不保存更改.

  • 不再需要通过`Missing.Value`.通过支持C#4.0中引入的[命名和可选参数](https://msdn.microsoft.com/en-us/library/dd264739.aspx),您可以编写`xlWorkBook.Close(SaveChanges:false);` (3认同)
  • @John真的是一个不同的问题,但在`xlWorkBook.Close`之前做了类似的事情:`Application.DisplayAlerts = False``xlWorkBook.SaveAs(etc)``Application.DisplayAlerts = True` (2认同)