无法closures我的代码的Excel

有一个小问题。 我打开一个Excel电子表格通过互操作包装。 当文档再次closures并提示用户时,我需要拦截。 我的问题是,Excel永远不会closures,不知何故,我一直在引用一些东西。 我尝试了所有可以find的教程,在这里阅读所有的博客post,但是我一定会错过一些东西。 下面是我的代码(请注意,一切都被注释掉,现在我杀死所有进程 – 这是不希望的行为):

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 ??? } 

任何帮助搞清楚这一点是高度赞赏

您不会设置appExcel = null (您可能需要将工作簿引用也设置为null)。 您应该在调用任何垃圾回收之前这样做(这真的不需要)。

尽量不要杀死excel进程:例如,Excel 2013通常在一个可执行文件中运行多个Excel会话。 如果你closures这样的会议,你可以让自己不受欢迎。

尝试using()阻止打开工作簿等! 这将closures并免费提供所有资源。