OleDbDataReader не видит данных в ячейке(.файлы XLSX)


У меня действительно странная проблема с чтением xlsx файла(я использую OleDbDataReader).

У меня есть столбец, состоящий из следующих данных:

  • 50595855
  • [5]}59528522
  • C_213154
  • 23141411
Проблема в том, что когда я читаю эту колонку, читатель показывает мне, что Третья строка пуста. Формат столбца в Excel имеет значение "общие". Но когда я устанавливаю формат "текст", все работает нормально, и читатель видит данные в этом ряд.

Итак, просто ради эксперимента, я префиксовал первые две строки буквой и сделал так, чтобы это выглядело следующим образом :

  • C_50595855
  • C_59528522
  • C_213154
  • 23141411

И читатель читает все без проблем, даже если формат столбца установлен в "General".

Таким образом, Excel, по-видимому, каким-то образом анализирует данные в столбце перед его загрузкой, и он запутывается, когда первые ячейки столбца выглядят как числовые и некоторые из них остальное-тексты..

Это действительно странно для меня, так как либо есть данные в ячейке, либо их нет.

У кого-нибудь есть идеи, почему это происходит?

Любая помощь будет очень признательна.

С уважением, Игорь

1 2

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;")

"