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