2016-06-09 9 views
0

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

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

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

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

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

ответ

0

Возможно, 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, вы должны найти, что результирующий файл больше, чем раньше.

1

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

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

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

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

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

+0

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