我很難找到關於如何使用Exce正確關閉和保存Excel文件的良好文檔; Office Interop dll。保存並關閉在C#.Net中創建的Excel文件使用Excel Office Interop dll
基本上,我所有的工作都是關於創建一個新的Excel工作簿,並用列表中的數據填充第一個工作表(當我在應用程序對象上將visible屬性設置爲true時,我可以看到Excel文件打開並填充該工作表正是我想要的方式。)
我只需要知道如何正確關閉Excel文件並將其保存到我選擇的位置。我想確保在代碼完成後我徹底殺死了Excel - 當我完成時不希望它繼續保留內存。
現在我用數據填充工作表後做下面我想:
workbook.Save();
workbook.Close(Type.Missing, Type.Missing, Type.Missing);
application.Quit();
更新:我現在能夠以Excel文件保存到我想要的位置。我只是刪除了Save()調用並將Close調用改爲(true,filePath,Type.Missing),現在它將文件放在所需的位置。
唯一需要解決的問題是正確關閉COM對象。
可能的解決方案至少這似乎每次代碼完成執行時從任務管理器中刪除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次,每次任務管理器都會顯示Excel,然後在代碼完成後將其刪除。
最終更新:上面的代碼肯定會處理所有的COM對象,並且一切正常。
這看起來對我來說是正確的,是什麼讓你懷疑你可能做得不對? – Mathias
在代碼執行後,Excel仍會在任務管理器中顯示,只是想確保它不會留在那裏並佔用內存。 –
然後我認爲你的問題不是關閉Excel,而是配置其他一些Excel對象。看看這個可能會幫助你的StackOverflow問題。 http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects-in-c – Mathias