【问题标题】:How to close-without-save an Excel /xlsm workbook, w/ a custom function, from C#如何从 C# 关闭而不保存带有自定义函数的 Excel /xlsm 工作簿
【发布时间】:2012-01-11 03:46:40
【问题描述】:

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

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

【问题讨论】:

  • 你也可以在保存之前做一个workbook.Saved = true,让excel应用知道这个已经保存了,不需要提示了..

标签: c# excel excel-interop


【解决方案1】:

当您使用 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();

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

【讨论】:

  • 真的有必要将System.Reflection.Missing.Value 参数传递给Close 方法吗?我只通过 false 来结束,还没有遇到任何问题。
  • @JeremyCook 曾几何时,也许需要通过 dot net 更新来改变。
  • 不再需要传递Missing.Value。在 C# 4.0 中引入了对 named and optional arguments 的支持,您只需编写 xlWorkBook.Close(SaveChanges: false);
  • @John 真的是一个不同的问题,但在xlWorkBook.Close 之前做这样的事情:Application.DisplayAlerts = False xlWorkBook.SaveAs (etc.) Application.DisplayAlerts = True
  • @John 指定文件名
猜你喜欢
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多