Файл Excel заблокирован после возникновения исключения - PullRequest
0 голосов
/ 28 февраля 2012

У меня отлично работает приложение, но бывают случаи, когда приложение выходит из системы рано, за некоторыми исключениями, чтобы избежать потенциальных проблем, если пользователь пытается продолжить работу с неверными данными. Побочным эффектом, который я не могу обойти, является проблема, заключающаяся в том, что даже при очистке кода в блоке 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);
  }
...