【发布时间】:2013-11-27 10:40:27
【问题描述】:
我正在使用 Excel 互操作 COM 对象。 我正在编写一种方法,在该方法中,我打开和关闭 Excel 应用程序,然后打开 Excel 工作簿和工作表。在我完成它们的工作后,我将关闭应用程序和工作簿。 我的问题是这个方法可以多次重复调用,当工作表和应用程序关闭时,如果我想保存所做的更改,我会从 Excel 应用程序收到一条消息。该方法一直卡住,直到我按“否”,但我不能告诉用户每次都按它。
如何在不收到此消息或至少通过代码回答的情况下关闭应用程序?
这些是我用来关闭应用程序和工作簿的方法:
private void FreeWorkSheetResources(Excel.Worksheet sheet)
{
Marshal.ReleaseComObject(sheet);
sheet = null;
}
private void FreeWorkBookResources()
{
if (_excelSheets != null)
{
Marshal.ReleaseComObject(_excelSheets);
_excelSheets = null;
}
_excelWorkBook.Close();
Marshal.ReleaseComObject(_excelWorkBook);
_excelWorkBook = null;
}
private void FreeApplicationResources()
{
_app.Quit();
Marshal.ReleaseComObject(_app);
_app = null;
GC.Collect();
}
这就是我使用它们的方式:
if (_app == null)
{
_app = new Excel.Application();
}
if (_excelWorkBook == null)
{
_excelWorkBook = GetWorkBook(_filePath);
}
....
....
FreeWorkBookResources();
FreeApplicationResources();
【问题讨论】:
-
所以您没有保存您在工作表上所做的更改,对吧?
-
我只是从工作表中读取,而不是更新它。我不知道他为什么还要问我是否要保存任何更改
标签: c# excel com excel-interop