保存并closures在C#.Net中创build的Excel文件使用Excel Office Interop dll

我很难find关于如何使用Exce正确closures和保存Excel文件的很好的文档; Office Interop DLL。

基本上,我已经一切工作,关于创build一个新的Excel工作簿,并填写第一个工作表的数据从列表(当我设置可视属性为真的应用程序对象,我可以看到Excel文件打开并填写工作表完全我想要的方式。)

我只需要知道如何正确closuresExcel文件并将其保存到我select的位置。 我想确保在代码完成后我彻底杀死了Excel–当我完成时,不希望它继续保留内存。

在填写完工作表后,我正在做以下工作:

workbook.Save(); workbook.Close(Type.Missing, Type.Missing, Type.Missing); application.Quit(); 

更新:我现在能够将Excel文件保存到我想要的位置。 我只是删除了Save()调用,并将Close调用更改为(true,filePath,Type.Missing),现在将文件放在所需的位置。

只有解决问题才能正确closuresCOM对象。

可能的解决scheme至less这似乎每次代码完成执行时从任务pipe理器中删除Excel。

 // Close the workbook, tell it to save and give the path. workbook.Close(true, workbookPath, Type.Missing); // Now quit the application. application.Quit(); // Call the garbage collector to collect and wait for finalizers to finish. GC.Collect(); GC.WaitForPendingFinalizers(); // Release the COM objects that have been instantiated. Marshal.FinalReleaseComObject(workbook); Marshal.FinalReleaseComObject(worksheet); Marshal.FinalReleaseComObject(workrange); Marshal.FinalReleaseComObject(application); 

我相信这将起作用。 我认为问题在于我没有释放所有已经实例化的东西,我认为迫使GC收集是最后的缺失部分。 我跑了20次,每次任务pipe理器会显示Excel,然后在代码完成后将其删除。

最后更新:上面的代码肯定会处理所有的COM对象,一切工作正常。

没有100%的方法总是在所有的情况下摆脱.NET的COM对象,但附加Marshal.FinalReleaseComObject (application); application = null; Marshal.FinalReleaseComObject (application); application = null; 在呼叫Quit()增加你的机会…

有关MSDN参考,请参阅http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.finalreleasecomobject.aspx