Различение между исключениями, выдаваемыми операциями Excel Interop

Я экспортирую данные в Excel из моего приложения C#, используя Microsoft.Office.Interop.Excel библиотека.

призвание sheet.Cells[currentRow, 1]) с недействительным currentRow значение, приводит к System.Runtime.InteropServices.COMException с сообщением:

"Exception from HRESULT: 0x800A03EC"

и ErrorCode -2146827284

Тем не менее, я получил точно такой же код ошибки для заказа Excel сохранить в защищенный от записи файл.

Есть ли способ для меня, чтобы различать COMException, полученные из Excel, чтобы я мог обработать их соответственно? Я не хотел бы оставлять своих пользователей с "Что-то пошло не так при работе с Excel, извините, лох".

2 ответа

Решение

Я работаю с Excel взаимодействия в течение нескольких лет, и я не нашел пути. Лучше всего проверять наличие потенциальных проблем до их возникновения. Хотелось бы, чтобы было что-то лучше, но, насколько мне известно, нет.

РЕДАКТИРОВАТЬ
Вы можете отлавливать различные ошибки в VBA, поэтому в Excel действительно различают различные ошибки, но я считаю, что.NET объединяет все эти ошибки в один класс COMException, который не дает вам подробной информации.

Я нашел эту статью, детализирующую коды ошибок VBA:
http://support.microsoft.com/kb/146864

Весь смысл COMException в том, что он возвращается со стороны СОМ. Обычно в COM об ошибках сообщается HRESULT возвращаемое значение из конкретного метода не равно 0.

Это, к сожалению, объем информации об ошибках, встроенных в COM-контракты. Таким образом, вы получите значение ошибки (0x800A03EC - это то же значение, что и -2146827284)..NET сторона вещей не имеет дополнительной информации.

Другие вопросы по тегам