如何发布excel流程?

时间:2010-09-28 14:52:05

标签: c# excel-interop

我正在使用Excel互操作,似乎每次调用时都会创建一个进程

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

即使我打电话

也永远不会结束这个过程
xlApp.Quit();

如何让流程结束?

3 个答案:

答案 0 :(得分:3)

您是否正在发布所有参考文献? (这意味着你必须首先保存它们。)

例如,这是我从一些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;
        }
    }

(不确定这是否完美,但它对我有用!)

答案 1 :(得分:1)

如果不释放使用过的COM对象,Excel将不会退出。

This Answer should provide more information.

答案 2 :(得分:0)

大部分时间都会发生这种情况,因为您确实修改了文档而Excel正在等待一些保存。 尝试类似:

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