Avatar ·

Comment libérer correctement les ressources des objets COM Excel Interop en C# ?

Bonjour à tous ! J'écris une petite application en C# pour travailler avec Excel via Microsoft.Office.Interop.Excel. Je suis confronté à un problème : après l'exécution du code, le processus Excel.exe reste dans le gestionnaire de tâches et ne se termine pas, même lorsque j'appelle explicitement Quit() et Marshal.ReleaseComObject().

Voici un exemple de mon code :

using Excel = Microsoft.Office.Interop.Excel;

public void ExportToExcel()
{
    var excelApp = new Excel.Application();
    excelApp.Visible = false;
    var workbook = excelApp.Workbooks.Add();
    var worksheet = workbook.Worksheets[1] as Excel.Worksheet;

    worksheet.Cells[1, 1] = "Hello";
    worksheet.Cells[1, 2] = "World";

    workbook.SaveAs(@"C:\test.xlsx");
    workbook.Close();
    excelApp.Quit();

    Marshal.ReleaseComObject(worksheet);
    Marshal.ReleaseComObject(workbook);
    Marshal.ReleaseComObject(excelApp);
}

Après avoir exécuté cette méthode, le processus Excel est toujours présent. J'ai essayé différentes variantes :