发生异常后锁定Excel文件

时间:2012-02-28 00:33:28

标签: c# excel com-interop office-automation

我的应用程序运行正常,但有时我会在某些例外情况下提前退出应用程序,以避免在用户尝试继续处理错误数据时出现潜在问题。我似乎无法解决的副作用是一个问题,即使在早期退出发生时,在finally块中清理代码,excel文件也会被C#代码永久锁定并变得无法使用。当您尝试在Excel中打开时,您将被锁定以进行编辑,您只能打开只读副本并再次运行应用程序无法将任何数据记录到Excel文件中。我找到了如何清理excel资源的答案,但即便如此,我仍然会收到此错误。这只有在拼写错误的文件名时才会发生,但由于这是很容易发生的事情,我无法预测它可能经常发生。从外部修复它真的不是那么难,但我真的不想告诉客户这里是一个我无法修复的问题所以这就是你要做的事情。感谢您对此问题的任何见解。

这是我打开和关闭excel文件的必要条件。

Excel.Application excelDocument = ExcelOperations.GetApplication();
excelDocument.DisplayAlerts = false;
Excel.Workbook xlWorkbook = ExcelOperations.GetWorkbook(excelDocument, docName);
Excel.Worksheet xlWorksheet = ExcelOperations.GetWorksheet(flight, xlWorkbook, ref xlColumn);
Excel.Range xlRange = ExcelOperations.GetRange(xlWorksheet);
try
{
  // Works is done in here.

  xlWorkbook.Save();


 }
 catch (Exception ex)
 {
     Console.WriteLine(ex.Message);

 }
 finally
 {
     //Clean up the com objects
       GC.Collect();
       GC.WaitForPendingFinalizers();

       Marshal.FinalReleaseComObject(xlRange);
       Marshal.FinalReleaseComObject(xlWorksheet);
       xlWorkbook.Close();
       Marshal.FinalReleaseComObject(xlWorkbook);
       excelDocument.Quit();
       Marshal.FinalReleaseComObject(excelDocument);
  }

0 个答案:

没有答案