如何清理C#中的Excel互操作对象

当我运行下面的代码时,它仍然不释放excel对象。

在这里输入图像说明

public static List<string> GetExcelSheets(string FilePath) { Microsoft.Office.Interop.Excel.Application ExcelObj = null; Workbook theWorkbook = null; Sheets sheets = null; try { ExcelObj = new Microsoft.Office.Interop.Excel.Application(); if (ExcelObj == null) { MessageBox.Show("ERROR: EXCEL couldn't be started!"); System.Windows.Forms.Application.Exit(); } theWorkbook = ExcelObj.Workbooks.Open(FilePath, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true); List<string> excelSheets = new List<string>(); sheets = theWorkbook.Worksheets; foreach (Worksheet item in sheets) { excelSheets.Add(item.Name); } return excelSheets; } catch (Exception ex) { return new List<string>(); } finally { // Clean up. releaseObject(sheets); releaseObject(theWorkbook); releaseObject(ExcelObj); } } private static void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Exception Occured while releasing object " + ex.ToString()); } finally { GC.Collect(); } } 

您忘记保留对ExcelObj.Workbooks的引用并将其发布:

 Workbooks workbooks; ... workbooks = ExcelObj.Workbooks; theWorkbook = workbooks.Open(... ... releaseObject(sheets); releaseObject(theWorkbook); releaseObject(workbooks); releaseObject(ExcelObj); 

试试这个代码:

 ExcelObj.Quit();