c#Interop Excel关闭实例
问题描述:
我有一段代码打开一个Excel应用程序转储一个范围,然后尝试关闭它。c#Interop Excel关闭实例
无论我做什么,尝试成为操作单词我无法获得关闭的excel实例 - 我遵循1点,而不是2点规则,据我所知,任何人都可以帮助我找到丢失的东西。
Excel.Application excelApp = new Excel.Application();
Excel.Workbooks wbks = excelApp.Workbooks;
Excel.Workbook currentWorkbook = wbks.Add();
Excel.Worksheet newWks = new Excel.Worksheet();
try
{
newWks = currentWorkbook.Sheets["Sheet2"];
newWks.Delete();
newWks = currentWorkbook.Sheets["Sheet3"];
newWks.Delete();
newWks=currentWorkbook.Sheets["Sheet1"];
for (int col = 0; col < dt.Columns.Count; col++)
{
newWks.Cells[1, col + 1] = dt.Columns[col].ColumnName;
}
string[,] arr = new string[dt.Rows.Count, dt.Columns.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
arr[i, j] = dt.Rows[i][j].ToString();
}
}
Excel.Range startCell = newWks.Cells[2, 1];
Excel.Range endCell = newWks.Cells[dt.Rows.Count + 1, dt.Columns.Count];
Excel.Range writeRange = newWks.Range[startCell, endCell];
writeRange.Value2 = arr;
Excel.Application cwa = currentWorkbook.Application;
cwa.DisplayAlerts = false;
Global.CheckDirectory(path);
currentWorkbook.SaveAs(path + @"//filepath", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV, Missing.Value,
Missing.Value, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlUserResolution, true,
Missing.Value, Missing.Value, Missing.Value);
cwa.Quit();
Marshal.ReleaseComObject(cwa);
Marshal.ReleaseComObject(startCell);
Marshal.ReleaseComObject(endCell);
Marshal.ReleaseComObject(writeRange);
}
catch (Exception ex)
{
//err handler
}
finally
{
wbks.Close();
excelApp.Quit();
Marshal.ReleaseComObject(newWks);
Marshal.ReleaseComObject(currentWorkbook);
Marshal.ReleaseComObject(wbks);
Marshal.ReleaseComObject(excelApp);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
答
嗨,
尝试关闭和顺序释放一切。
Marshal.ReleaseComObject(Range);
Marshal.ReleaseComObject(Worksheet);
//WRITE close and release
WWorkbook.Close();
Marshal.ReleaseComObject(Workbook);
//!WRITE quit and release
App.Quit();
Marshal.ReleaseComObject(App);
//cleanup
GC.Collect();
GC.WaitForPendingFinalizers();
见[这里](https://stackoverflow.com/questions/158706/how-do-i-properly-clean-up-excel-interop-objects)和[这里](https://开头stackoverflow.com/questions/25134024/clean-up-excel-interop-objects-with-idisposable/25135685#25135685)。 – Equalsk
您已经拥有了Excel应用程序excelApp的1个实例。是否有任何理由设置Excel.Application cwa = currentWorkbook.Application;?只需excelApp.Quit();最后应该做的工作,并保持excelApp:你可以做excelApp.DisplayAlerts = false; DisplayAlerts属于Excel应用程序而不是工作簿。 –