2

I'm using the Excel interop and it seems to be creating a process every time I call

new Microsoft.Office.Interop.Excel.Application()

And never ending the process even though I call

xlApp.Quit();

How can I get the processes to end?

C. Ross
  • 31,137
  • 42
  • 147
  • 238

3 Answers3

3

Are you releasing all of your references? (Which means you have to save them in the first place).

For example here's what's in my dispose from some excel interop():

    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;
        }
    }

(Not sure if this is perfect but it worked for me!)

Grant Crofton
  • 8,895
  • 5
  • 28
  • 38
1

Excel won't quit if you don't release used COM Objects.

This Answer should provide more information.

Community
  • 1
  • 1
marg
  • 2,817
  • 1
  • 31
  • 34
  • Yeah, that's where I got my solution from, mainly. Although I found just doing what the chosen answer selected wasn't enough, I had to put the Close(), the Quit() and the GC calls in there too. Difficult to get rid of, those damn Excel spreadsheets! – Grant Crofton Sep 28 '10 at 15:03
0

Most of the time this happens because you did modify the document and Excel is waiting for some saving. Try something like:

ObjWorkBook.Close(Microsoft.Office.Interop.Excel.XlSaveAction.xlDoNotSaveChanges, 
    Type.Missing, Type.Missing);

before quitting