COMExcel工作簿关闭异常
本文关键字:异常 工作簿 COMExcel | 更新日期: 2023-09-27 18:25:44
我正在使用Excel = Microsoft.Office.Interop.Excel
将各种数据写入Excel工作表。
Excel.Workbook wb = null;
Excel.Worksheet ws = null;
Excel.Application excelApp = new Excel.Application();
excelApp.Visible = true;
try {
// Create new workbook
wb = (Excel.Workbook)(excelApp.Workbooks.Add(Type.Missing));
ws = wb.ActiveSheet as Excel.Worksheet;
// write data ...
// Save & Close
excelApp.DisplayAlerts = false; // Don't show file dialog for overwrite
wb.Close(true, targetFilename, Type.Missing);
} finally {
// Close the Excel process
if (null != ws)
Marshal.ReleaseComObject(ws);
if (null != wb)
Marshal.ReleaseComObject(wb);
excelApp.Quit();
Marshal.ReleaseComObject(excelApp);
GC.Collect();
}
这段代码一次由多个线程执行,而且它几乎一直在工作。甚至Excel进程也会在任务管理器中消失。
但是,有时会向wb.Close(true, targetFilename, Type.Missing)
抛出System.Runtime.InteropServices.COMException
。它声称对目标文件名的访问被拒绝。尽管我一直在确保目标文件名是唯一的。
异常可能是由于Excel处理不好,或者我使用了线程?
显然,targetFilename并不是唯一的。大写/小写拼写有一个区别,似乎有两个线程试图同时写入同一个文件。使用targetFilename.ToLower()
可以很容易地解决这个问题。
无论如何,如果您发现任何进一步的潜在问题,请留下评论。