簡體   English   中英

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

[英]How to clean up Excel interop objects in C#

當我運行以下代碼時,它仍然不會釋放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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM