OleDbDataReader не видит данных в ячейке(.файлы XLSX)
У меня действительно странная проблема с чтением xlsx файла(я использую OleDbDataReader).
У меня есть столбец, состоящий из следующих данных:
- 50595855 [5]}59528522
- C_213154
- 23141411
Итак, просто ради эксперимента, я префиксовал первые две строки буквой и сделал так, чтобы это выглядело следующим образом :
- C_50595855
- C_59528522
- C_213154
- 23141411
И читатель читает все без проблем, даже если формат столбца установлен в "General".
Таким образом, Excel, по-видимому, каким-то образом анализирует данные в столбце перед его загрузкой, и он запутывается, когда первые ячейки столбца выглядят как числовые и некоторые из них остальное-тексты..
Это действительно странно для меня, так как либо есть данные в ячейке, либо их нет.
У кого-нибудь есть идеи, почему это происходит?Любая помощь будет очень признательна.
С уважением, Игорь
1 ответ:
Как вы и предполагали, это проблема, вызванная смешанными типами данных. Если вы выполните поиск по "OleDBDataReader mixed types", вы получите несколько ответов. Вот страница MSDN, которая описывает проблему:
" эта проблема вызвана ограничением драйвера ISAM Excel в том, что как только он определяет тип данных столбца Excel, он возвращает значение Null для любого значения, которое не относится к типу данных, который драйвер ISAM по умолчанию установил для этого столбца Excel. Драйвер Excel ISAM определяет тип данных из столбца Excel путем изучения фактических значений в первых нескольких строках, а затем выбирает тип данных, который представляет большинство значений в его выборке."
... и решение (ы):
" Убедитесь, что данные в Excel вводятся в виде текста. Просто переформатирование столбца Excel в текст этого не сделает. После переформатирования столбца Excel необходимо повторно ввести существующие значения. В Excel можно использовать F5 для повторного ввода существующих значений в выбранную ячейку.
Вы можете добавьте параметр IMEX=1; в строку Excel connect в методе OpenDatabase. Например:
Set Db = OpenDatabase("C:\Temp\Book1.xls", False, True, "Excel 8.0; HDR=NO; IMEX=1;")
"