使用Microsoft.Office.Interop.Excel解析Excel文件 - 在内存中挂起Excel.exe进程

时间:2011-08-06 16:55:46

标签: memory c#-4.0 process hang excel-interop

您好我用Microsoft.Office.Interop.Excel解析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次调用此方法,我在memmory中有100个excel.exe进程。

这是正常的吗?怎么解决呢。

感谢您的时间和合作

1 个答案:

答案 0 :(得分:0)

您可能需要使用Marshal.ReleaseComObject - 查看this questionthis question的答案。