Я использую Excel = Microsoft.Office.Interop.Excel
для записи различных данных в листы Excel.COMException при закрытии книги 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
выбрасывается в wb.Close(true, targetFilename, Type.Missing)
. Он утверждает, что доступ к целевому имени файла был отклонен. Хотя я убедился, что целевые имена файлов уникальны.
Может быть исключение из-за плохой обработки Excel или, может быть, я использую потоки?