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

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

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

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

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

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


person user2739418    schedule 09.06.2016    source источник


Ответы (2)


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

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

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

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

person Tim Andersen    schedule 09.06.2016

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

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

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

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

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

person rickus123    schedule 17.08.2016
comment
Я должен добавить, что проблемы, которые я видел, были ограничены значениями «текстовых» ячеек. Это может быть связано с тем, как EPPlus обрабатывает ячейки, требующие поиска в ресурсе «sharedStrings.xml», на который ссылаются все текстовые значения ячеек. - person rickus123; 17.08.2016