Добулд в непустой ячейке при чтении файла Excel через OLEDB
Вопрос
Я использую OLEDB, чтобы прочитать файл Excel.Один из колонн имеет «общий» формат и содержит обе строки с буквами и значениями, состоящими только из номеров.Значения строк извлекаются без проблем, но чистые числовые значения извлекаются как DBNull
.
Как решить?
Я использую следующую строку подключения для открытия
"Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\\file.xls;
Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""
. Решение
Я нашел некоторую документацию на веб-сайте Microsoft, который применяется к вашему сценарию.Они рекомендуют преобразовывать все числовые в строки.
http://support.microsoft.com/kb/257819
Как указано ранее, ADO должен угадать на тип данных для каждого столбца в вашем листе или диапазоне Excel.(Это не влияет на настройки форматирования клеток Excel.) Серьезная проблема может возникнуть, если у вас есть числовые значения, смешанные с текстовыми значениями в одном столбце.Как самолет, так и поставщик ODBC возвращает данные типа большинства, но возвращают нулевые (пустые) значения для типа данных меньшинств.Если два типа одинаково смешаны в столбце, провайдер выбирает числовой текст.
Например:
* In your eight (8) scanned rows, if the column contains five (5) numeric values and three (3) text values, the provider returns five (5) numbers and three (3) null values.
* In your eight (8) scanned rows, if the column contains three (3) numeric values and five (5) text values, the provider returns three (3) null values and five (5) text values.
* In your eight (8) scanned rows, if the column contains four (4) numeric values and four (4) text values, the provider returns four (4) numbers and four (4) null values.
. Другие советы
У меня такая же проблема, но со строчными значениями.Цифровые значения возвращаются, но строковые значения возвращаются как NULL.Я хочу загружать числовые значения в виде строковых значений.Столбец может содержать цифры и не цифровые коды (пример: 100344567 и prd001x01).
Драйвер Excel считает, что столбец имеет тип числовых, потому что значения в первых 8 рядах имеют числовую цифру.
Даже если я определяю клетки как текст (формата ячейки), он не работает.
Чтобы заставить драйвер «видеть» столбец как строка, которую я просто положил цитату перед числовым значением («100344567).Это превращает числовое значение в строку.
Это значение 8 строк определено в реестре HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Jet \ 4.0 \ Emsies \ Excel \ -> Typeguessrows= 8.
Я надеюсь, что это поможет.