如何正确处理Excel.Application类

时间:2016-11-01 11:30:21

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

我真的很痛苦,而Excel.Application()不想被释放,无论如何。即使在新类被实例化并在之后立即处理之后,它仍然会出现在进程列表中。

if (_ExcelApp == null)
    _ExcelApp = new Microsoft.Office.Interop.Excel.Application();
Dispose();

public void Dispose()
{
    if (_ExcelApp != null)
    {
        try
        {
            _ExcelApp.Quit();
            Marshal.FinalReleaseComObject(_ExcelApp);
        }
        catch (Exception) { }
            _ExcelApp = null;
    }
}

请帮忙!

1 个答案:

答案 0 :(得分:3)

它不会释放,因为并非所有与_ExcelApp相关的COM对象都已发布。如果你提供所有代码,它可能会更清晰。

Workbooks wb =_ExcelApp.Workbooks;
Workbook book = wb.Add();

然后在try catch:

          try
            {
              book.Close();
              Marshal.ReleaseComObject(book);
              wb.Close();
              Marshal.ReleaseComObject(wb);
              _ExcelApp.Quit();
              Marshal.FinalReleaseComObject(_ExcelApp);
            }
        catch (Exception) { }
            _ExcelApp = null;
    }

_ExcelApp.WorkBooks.Add();创建新的WorkBook,您不会释放此对象。此外,它还创建了必须发布的Workbooks对象。

如前所述,如果您显示所有代码(如果可能的话,那么)会更好