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

时间:2012-01-04 13:00:09

标签: c# excel office-interop excel-interop

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

enter image description here

 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();
            }
        }

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

试试这段代码:

ExcelObj.Quit();