所以我有一個Microsoft.Office.Interop.Excel.Workbook對象。它基本上使用模板Excel文件來構建自己。 Excel文件包含結果部分的模板列顏色等,然後代碼基本上只是打印在這些模板列上,它實際上並沒有自定義文件本身的外觀,只是將數據放入其中。如何「清理」Microsoft.Office.Interop.Excel.Workbook
但是,這是一個問題,因爲完成後,我們的模板會佔用最多的可用行數,但很多時間(大部分時間),我們甚至不使用其中的一半。
在創建文件後直接使用Microsoft.Office.Interop.Excel.Workbook對象,刪除所有沒有單元數據的行的最簡單方法是什麼?我們已經有了一個在創建後運行的「清理」方法,但是我想向其添加邏輯。這裏是我們目前的清理:
private void CleanupExcel()
{
if (!_visible && _workbook != null)
{
_workbook.Close(false, Missing.Value, Missing.Value);
}
_workbook = null;
_sheet = null;
if (_excel != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(_excel);
// WW, 5/26/09: not sure if a problem here, but it probably is since the code was taken from here
// but in the indicator, Excel exists in the process even after the app is closed. The code here seems to fix it.
GC.Collect();
GC.WaitForPendingFinalizers();
}
_excel = null;
}
P.S.這是該文檔中兩張表格中的第一張。如果這樣做更容易,我也可以訪問Microsoft.Office.Interop.Excel.Worksheet對象。
不是針對您的實際問題,而是針對代碼示例中的註釋。你沒有正確地清理東西,如果你這樣做,你不需要`GC.Collect();`。您應該釋放您在任何地方創建的所有對象(其中包括始終保留對創建的所有內容的引用)。看到這個問題的更多細節:http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects-in-c – 2010-12-09 13:45:36