Come rilasciare il processo Excel?
-
26-09-2019 - |
Domanda
Sto usando Excel Interop e sembra creare un processo ogni volta che chiamo
new Microsoft.Office.Interop.Excel.Application()
E non finendo mai il processo anche se chiamo
xlApp.Quit();
Come posso far finire i processi?
Soluzione
Stai rilasciando tutti i tuoi riferimenti? (Il che significa che devi salvarli in primo luogo).
Ad esempio, ecco cosa è nella mia disposizione da alcuni interop Excel ():
public void Dispose()
{
if(!this.disposed)
{
if(cell != null)
Marshal.FinalReleaseComObject(cell);
if(cells != null)
Marshal.FinalReleaseComObject(cells);
if(worksheet != null)
Marshal.FinalReleaseComObject(worksheet);
if(worksheets != null)
Marshal.FinalReleaseComObject(worksheets);
if (workbook != null)
{
workbook.Close(false, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(workbook);
}
Marshal.FinalReleaseComObject(workbooks);
xlApp.Quit();
Marshal.FinalReleaseComObject(xlApp);
GC.Collect();
GC.WaitForPendingFinalizers();
disposed = true;
}
}
(Non sono sicuro che sia perfetto ma ha funzionato per me!)
Altri suggerimenti
Excel non smetterà se non si rilascia oggetti COM usati.
Il più delle volte ciò accade perché hai modificato il documento ed Excel sta aspettando un po 'di risparmio. Prova qualcosa come:
ObjWorkBook.Close(Microsoft.Office.Interop.Excel.XlSaveAction.xlDoNotSaveChanges,
Type.Missing, Type.Missing);
prima di smettere
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow