如何在C#中使用自定义函数关闭不保存Excel / xlsm工作簿

31

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

当我尝试直接关闭(而不保存)时,会弹出保存提示框。我怀疑这是因为Excel将打开时的自动重算视为创建了更改,即使实际上没有数值或公式发生变化。我还设置了Excel.Application.Calculation = Excel.XlCalculation.xlCalculationManual。如何防止出现保存提示框并只进行无保存关闭?


2
在保存之前,您可以执行“workbook.Saved = true”操作,以便让 Excel 应用程序知道已经保存,并且不需要提示。 - nawfal
1个回答

62

使用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表示不保存更改。


1
System.Reflection.Missing.Value 参数传递给 Close 方法是否真的必要?我只传递 false 关闭,但到目前为止还没有出现任何问题。 - Jeremy Cook
1
从前,也许需要这样做,但随着.NET更新,这种需求可能已经改变了。@JeremyCook - Motomotes
3
不再需要传递 Missing.Value 了。在 C# 4.0 中引入的 命名和可选参数 的支持下,您只需编写 xlWorkBook.Close(SaveChanges: false); 即可。 - Ronald Boehm
2
@John 这是一个不同的问题,但在 xlWorkBook.Close 之前执行以下操作:Application.DisplayAlerts = False xlWorkBook.SaveAs (etc.) Application.DisplayAlerts = True - Motomotes
1
@John 请指定文件名 - Motomotes
显示剩余4条评论

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