无法从我的代码关闭excel
本文关键字:excel 代码 我的 | 更新日期: 2023-09-27 17:49:35
有个小问题。我通过互操作包装打开一个excel电子表格。我需要在文档再次关闭时拦截并提示用户。我的问题是,excel从来没有关闭,不知何故,我一直有参考的东西。我尝试了我能找到的所有教程,阅读了所有的博客文章,但我一定错过了什么。下面是我的代码(请注意,所有内容都被注释掉了,现在我杀死了所有进程-这不是期望的行为):
private Action currentCallback;
Microsoft.Office.Interop.Excel.Application appExcel;
public bool OpenDocumentWithCallback(string path, Action callbackMethod)
{
bool result = true;
try
{
currentCallback = callbackMethod;
appExcel = new Application();
appExcel.Visible = true;
Workbooks books = appExcel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook docExcel = books.Open(Filename: path, ReadOnly: false);
appExcel.WorkbookBeforeClose += appExcel_WorkbookBeforeClose; // <-- hooking the event
}
catch (Exception ex)
{
result = false;
LogEntry.GetLogInterface().WriteDebugExceptionEntry(ex.ToString(), ex, SystemData.LogLevel.Critical);
}
return result;
}
void appExcel_WorkbookBeforeClose(Workbook Wb, ref bool Cancel)
{
GC.Collect();
GC.WaitForPendingFinalizers();
Wb.Close();
//Marshal.FinalReleaseComObject(Wb);
//appExcel.Visible = false;
//KillExcel(GetExcelProcess());
MurderAllExcelProcesses(); <--- last resort - killing all processes
//appExcel.Quit();
//Marshal.FinalReleaseComObject(appExcel);
currentCallback(); //<-- after this delegate is called i cannot access the excel file because it is in use by another application ???
}
请大家帮忙解决这个问题。
尝试使用using()
Block打开工作簿等!这将关闭并释放所有资源。
您从未设置appExcel = null
(您可能需要将工作簿引用设置为null)。您应该在显式调用任何垃圾收集之前这样做(这实际上应该是不必要的)。