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?

È stato utile?

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.

Questa risposta dovrebbe fornire ulteriori informazioni.

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
scroll top