0

我正在使用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 进程也会在任务管理器中消失。

但是,有时System.Runtime.InteropServices.COMException会抛出a wb.Close(true, targetFilename, Type.Missing)。它声称对目标文件名的访问被拒绝。虽然我一直在确保目标文件名是唯一的。

异常可能是由于对 Excel 的任何错误处理,还是我正在使用线程?

4

1 回答 1

0

显然,targetFilename 并不是真正独一无二的。大写/小写拼写只有一个区别,似乎两个线程试图一次写入同一个文件。这个问题很容易通过使用来解决targetFilename.ToLower()

无论如何,如果您发现任何进一步的潜在问题,请发表评论。

于 2013-08-01T12:46:45.740 回答