Разбор файла Excel с помощью Microsoft.Office.Interop.Excel - зависание процесса Excel.exe в памяти - PullRequest
1 голос
/ 06 августа 2011

Привет, я анализирую таблицу Excel с Microsoft.Office.Interop.Excel.Вот мой код, который преобразует таблицу Excel в таблицу данных.Это работает хорошо.

    public static DataTable ImportExcelToDataTable(String path)
    {
        var app = new Application {Visible = false};

        Workbook workBook = app.Workbooks.Open(path, 0, true, 5, "", "", 
            true, XlPlatform.xlWindows, Type.Missing, false,
        false, 0, true, 1, 0);
        Sheets sheets = workBook.Worksheets;

        var activeSheet = (Worksheet) sheets.Item[1];
        Range activeSheetRange = activeSheet.UsedRange;

        var dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns.Add("Name");

        for (int i = 1; i <= activeSheetRange.Rows.Count; i++)
        {
            DataRow dr = dt.NewRow();
            for (int j = 1; j <= activeSheetRange.Columns.Count; j++)
            {
                string value = ((Range) activeSheetRange.Cells[i, j]).Value2.ToString();
                dr[j - 1] = value;
            }
            dt.Rows.Add(dr);
            dt.AcceptChanges();
        }

        app.Quit();
        app.Workbooks.Close();
        GC.Collect();
        return dt;
    }

Проблема Я запускаю приложение (Консоль), вызываю этот метод и закрываю консольное приложение.Если я проверяю процесс TaskManager, я вижу, что процесс Excel.exe все еще выполняется.

Если я вызываю этот метод 100 раз, у меня в памяти 100 процессов Excel.exe.

Это нормально?Как можно решить.

Спасибо за ваше время и сотрудничество

1 Ответ

0 голосов
/ 06 августа 2011

Возможно, вам потребуется использовать Marshal.ReleaseComObject - см. Ответы на этот вопрос и этот вопрос .

...