代码之家  ›  专栏  ›  技术社区  ›  LePrinceDeDhump

如何正确处理互操作Excel应用程序和工作簿?[复制]

c#
  •  1
  • LePrinceDeDhump  · 技术社区  · 6 年前

    (更新:这不是 Why does Microsoft.Office.Interop.Excel.Application.Quit() leave the background process running? ,这个问题是关于当出现异常时如何从内存中释放excel)

    var myExcelApp = new Microsoft.Office.Interop.Excel.Application();
    Excel.Workbooks AllWorkbooks= xlApp.Workbooks;
    Excel.Workbook MyWorkBook= //Open workbook
    Excel.Worksheet MySheet= //Open worksheet
    //Do the work
    MyWorkBook.Close(false, file);
    myExcelApp.Quit();
    Marshal.FinalReleaseComObject(myExcelApp );
    //FInalReleaseComObject for MyWorkBooks
    

    除非抛出异常,然后Excel会在后台逗留,并且必须使用任务管理器将其关闭,否则这一切正常。

    using 方块,还是我应该像这样把所有东西都围起来?

    Excel.Workbooks AllWorkbooks= null;
    Excel.Workbook MyWorkBook=null;
    Excel.Worksheet MyWorkshet=null;
    Excel.Application myExcelApp=null;         
    try{
    //Read file here
    }
    catch{
        MyWorkBook?.Close(false, file);
        myExcelApp?.Quit();
        Marshal.FinalReleaseComObject(myExcelApp );
        //FInalReleaseComObject for MyWorkBooks
    }
    

    谢谢

    0 回复  |  直到 6 年前