Я читаю XLSX (файл Microsoft Excel XML) с помощью Excel Data Reader из http://exceldatareader.codeplex.com/, и у меня проблема с отсутствующими данными. Данные, находящиеся в исходной электронной таблице Excel, отсутствуют в наборе данных, возвращаемом библиотекой.
Вот немного подробнее о том, что я делаю:
- Создана простая тестовая электронная таблица в Excel с одним листом, строкой заголовка и двумя строками данных. Сохраните и закройте Excel.
- Откройте файл и передайте поток в метод CreateOpenXmlReader () и верните IExcelDataReader.
- Вызвать метод AsDataSet () в IExcelDataReader и вернуть DataSet.
- Получить ItemArray из строки 1 таблицы 0.
- Цикл по массиву элементов. Обнаружено, что отсутствуют данные (то есть есть члены System.DBNull, где я ожидал членов System.string).
Вот еще немного анализа ...
Я отладил код и заглянул внутрь объектной модели ExcelDataReader. Найден непубличный массив строк с именем «SST», который, по-видимому, содержит данные из электронной таблицы в виде одного линейного (одномерного) массива.
При ближайшем рассмотрении я обнаружил, что искомые данные также отсутствовали в этом массиве. В этих исходных данных элемент вообще не существует.
Я предполагаю, что по какой-то причине парсер не получает данные из OOXML и делает вывод, что ячейка пуста. Глядя на сам OOXML, кажется, что данные разделены по файлам sharedStrings.xml и sheet1.xml, поэтому, возможно, анализатору сложно собрать все это вместе.
Сохранение файла в двоичном формате (от Excel 97 до 2003) и чтение, которое решает проблему, поэтому на первый взгляд кажется, что я подозреваю, что это чтение в формате OOXML.
Предложения
В качестве пробела я конвертирую все файлы в двоичный формат, но это похоже на пометку. Есть ли способ заставить мои файлы Excel, отформатированные в OOXML, правильно читать с помощью Excel Data Reader?