Excel COMException 0x800A03EC, когда пользователь отменяет перезапись файла - PullRequest
3 голосов
/ 07 августа 2010

У меня есть код, который сохраняет файл Excel в определенное место и имя файла, который не может быть изменен пользователем. Он прекрасно работает, когда файл не существует и сохраняет в тихом режиме. Если файл уже существует, и пользователь выбирает перезаписать его, то он также работает нормально. Проблема возникает, когда она уже существует, и пользователь отменяет сохранение. Это вызывает выброс COMException 0x800A03EC. Есть идеи?

Ссылка: библиотека объектов Microsoft Excel 12.0

excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8);

Ответы [ 2 ]

3 голосов
/ 07 августа 2010

Поместите его в блок Try / Catch, как следует с любым кодом, который может дать сбой? Если он находится в блоке try / catch, то, учитывая информацию, которую вы нам дали, дизайн по определению имеет недостатки, потому что ....

  1. Функция ExcelWorkbook.Save () - это то, что вы не можете изменить. Это то, что есть ...
  2. Это сбой, потому что пользователь отменил сохранение, и вы вызываете метод SaveAs без предварительной проверки на наличие файла, и если Excel предлагает пользователю дать ему возможность отменить, и единственная опция - это ошибка Тогда единственный другой вариант - не предоставлять пользователю такой выбор.

В качестве общей рекомендации я бы сказал, что вы должны проверить наличие файла и дать пользователю возможность отменить свой ВАШ код. Если они отменяются, проблема устранена. Если они решили не отменять, просто удалите файл перед вызовом функции Excel Save ().

В качестве альтернативы вы можете вместо этого использовать функцию SaveAs () вместо Save () и установить для необязательного параметра с именем ConflictResolution значение XlSaveConflictResolution.xlLocalSessionChanges

(Если вы спросите, я знаю, что иметь дело с необязательными параметрами из C # - это боль, поэтому прочитайте этот предыдущий вопрос , как с ними обращаться ...)

1 голос
/ 07 августа 2010

Как насчет этого:

try
{
   excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8);
}
catch // If you want, you can try and catch the actual exception here
{
   // If it gets here, the user probably cancelled (or something else
   // went wrong) You should handle those cases as needed. In the case
   // of the user cancelling, just do nothing here!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...