#c# #export-to-excel #excel-interop
#c# #экспорт в Excel #excel-взаимодействие
Вопрос:
Я использую библиотеки взаимодействия Office в приложении C # WinForms для записи около 25000 строк и 110 столбцов данных в Excel 2016. Максимальная длина значения для любого элемента составляет 420 символов.
Я использую 2-мерный массив объектов для чтения значений из таблицы данных и передаю этот массив Range.set_Value
методу.
Приложение работает нормально для других таблиц данных, но для определенных данных я получаю сообщение об ошибке:
Исключение C # из HRESULT: 0x800A03EC
при использовании Range.set_Value
. Я не могу определить, какая из 25000 строк и 110 столбцов вызывает ошибку.
Я, конечно, могу начать разбивать данные на небольшие фрагменты, пока не определю, какие именно строки и столбцы вызывают проблему, но есть ли лучший способ отладить проблему?
Данные могут содержать всевозможные специальные символы (данные генерируются сторонним приложением).
РЕДАКТИРОВАТЬ 1:
Я читал, что вы не можете добавить ячейку с более чем 8192 символами, если это Excel 2007. Но мои данные содержат максимум 425 символов в любой ячейке, а моя версия Excel — 2016.
Комментарии:
1. вы искали внутренние исключения?
2. Исключение InnerException равно нулю
3. COM-вызовы завершаются неудачно, у вас должен быть план для этого. Вам также следует рассмотреть возможность реализации IMessageFilter, чтобы вы могли указать COM повторить попытку. Однако даже с фильтром вам потребуется реализовать некоторую стратегию повторных попыток.
4. Вызов COM завершается с ошибкой только для определенных данных, содержащих около 25000 строк, и он не работает после нескольких попыток повтора. Тот же код работает для всех других наборов данных
Ответ №1:
Я смог найти проблему с данными после некоторых проб и ошибок.
Несколько элементов в двумерном массиве начинались с символа «=», который рассматривается как начало формулы в Excel. Поскольку значение элемента не было допустимой формулой, поэтому Excel выдавал исключение.
Я добавил к этим текстовым значениям символ ‘, и все работало нормально.
Надеюсь, это кому-нибудь поможет.