Различение между исключениями, выдаваемыми операциями 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 сторона вещей не имеет дополнительной информации.