SpreadsheetGear Excel с использованием EPPLUS/NPOI не читается

Кто-нибудь сталкивался с этим? Я получаю файл от клиента, который генерируется через SpreadsheetGear. Это выглядит хорошо, если я открою его в Excel

Но он не может найти данные в ячейках, если я пытаюсь прочитать через EPPLUS или NPOI

Я считаю, что SpresheetGear не хватает некоторых свойств. Но какой я не знаю

Это работает, если я открываю файл Excel, а затем сохраняю как другой файл (размер увеличивается), а затем использую файл через EPPLUS/NPOI.

Не уверен, что сказать им, поскольку я не знаю, что пропускает Spreadsheetgear.

2 ответа

Решение

Может случиться так, что EPPlus зависит от определенных связанных с адресом ячеек атрибутов, которые помечены как "Необязательные" в формате файла Open XML, но которые SpreadsheetGear не записывает по умолчанию, чтобы уменьшить размер файла.

Если у вас есть доступ к приложению SpreadsheetGear, которое генерирует эти файлы, вы можете попробовать изменить его, чтобы записать эти необязательные атрибуты в формат файла, установив IWorkbookSet. Экспериментальное свойство строки OleDbOpenXmlWorkaround до сохранения файла на диск. Например:

SpreadsheetGear.IWorkbookSet workbookSet = SpreadsheetGear.Factory.GetWorkbookSet();
workbookSet.Experimental = "OleDbOpenXmlWorkaround";
SpreadsheetGear.IWorkbook workbook = workbookSet.Workbooks.Open(@"C:\myWorkbook.xlsx");
workbook.Save();

Подобно сохранению этого файла через Excel, вы должны обнаружить, что результирующий файл больше, чем раньше.

У меня та же проблема с файлом xlsx, сгенерированным SpreadsheetGear (внешним поставщиком), который я пытаюсь проанализировать с помощью EPPlus. Проходя по коду, я вижу, что присутствуют все значения ячеек, но они хранятся не по порядку (например, значение ячейки A1 отображается в слоте для ячейки A17).

Аналогично тому, что опубликовал Тим, файл, созданный SpreadsheetGear, содержит данные о ячейках, которые не имеют ссылок на ячейки (A1, B3, H17,...). Похоже, что это обязательное значение, исходя из того, что я прочел документ спецификации (доступен здесь) на странице 19 (из более чем 5000 страниц)

Я подтвердил, что это моя проблема, вручную отредактировав входящий файл xlsx (вы можете сделать это, переименовав файл в расширение.zip, а затем вручную отредактировав соответствующий файл sheet.xml и добавив обновленную версию обратно в zip-файл, переименуйте его в xlsx и попробуйте снова.)

В моем случае я добавил недостающую ссылку на ячейку в элемент 'c' в файле sheetData/row (r="A1", чтобы указать столбец 1, например, строку 1) некоторых (но не всех) ячеек, которые отсутствовали этот атрибут. Очевидно, этого было достаточно, чтобы "обмануть" анализатор файлов EPPlus, чтобы он знал, как обрабатывать входящие данные.

Несмотря на информативность, эти знания не очень помогают мне, потому что я пытаюсь обработать файл, создание которого полностью вне моего контроля. Возможно для других, это не будет иметь место.

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