Excel background process does not close

The Excel background process remains open after each opening and reading of a file using Iterop. After running the method below several times, I get a lot of Excel background processes. I understand that this was asked at different times, but I tried all the sentences (and implemented them in the code below), and nothing worked. Help someone help.

    public List<double> ReadExcelFile()
    {
        Application excelApp = null;
        Workbooks workbooks = null;
        Workbook workBook = null;
        Worksheet worksheet = null;
        Range excelRange = null;
        List<double> sheetValues = new List<double>();

        try
        {
            excelApp = new Application();
            workbooks = excelApp.Workbooks;
            workBook = workbooks.Open(f_inputFilePath,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing,
               Type.Missing, Type.Missing);
            worksheet = workBook.Sheets["Sheet1"];
            excelRange = worksheet.UsedRange;
            object[,] sheetValuesRaw = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);

            for (int i = f_firstNumericValueIndex; i <= sheetValuesRaw.GetLength(0); i++)
                sheetValues.Add((double)sheetValuesRaw[i, 1]);
        }
        finally
        {
            workBook.Close(false, Type.Missing, Type.Missing);
            workbooks.Close();

            releaseObject(excelRange);
            releaseObject(worksheet);
            releaseObject(workbooks);
            releaseObject(workBook);

            excelApp.Quit();
            releaseObject(excelApp);
        }
        return sheetValues;
    }

    private void releaseObject(object obj)
    {
        try
        {
            Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
        }
        finally
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
    }
+4
source share
1 answer

I had several problems with Excel materials a few weeks ago. However, I managed to solve the process hang by wrapping a method that uses Excel functionality in a try-catch-finally statement.

So it looks something like this:

public List<double> MyResults() {
    try {
        return ReadExcelFile();
    }
    finally {
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
}

"MyResults" , "ReadExcelFile".

, , Excel try-catch-finally , Interop, Excel GC .

+2

All Articles