Это часто встречается, и это очень понятно, потому что документации немного не хватает
Microsoft.ACE.OLEDB.12.0 не очень хорошо обрабатывает столбцы смешанных типов данных. Так что получается, что драйвер будет всегда читать первые n значений в каждом столбце и назначать тип данных в зависимости от того, что он найдет в первых n ячейках столбца. n определяется настройкой ключа реестра. Он перемещается в зависимости от того, есть ли у вас 64-битная реализация или 32-битная, но 64-битный ключ находится в ...
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows
К сожалению, не всегда удобно модифицировать ключи реестра, и было бы намного лучше оставить этот параметр в строке подключения, но это так и есть. Значение по умолчанию для этого составляет 8 строк.
Если драйвер обнаруживает смешанные типы данных, тогда и только тогда вступают в силу настройки IMEX. Если включено IMEX = 1, столбец смешанных типов данных возвращается в виде текста. Если он не указан, то все значения, которые не соответствуют назначенному типу данных, возвращаются как нулевые.
Здесь HDR = Нет - полезно. Если у вас есть заголовок, укажите HDR = Нет и прочитайте его. Это поможет гарантировать, что столбец будет возвращен как текст, если ваши заголовки, конечно, также являются текстовыми. Затем вы можете отказаться от заголовка перед обработкой данных. Это не поможет, если у вас есть большинство числовых типов данных / даты и времени в первых n ячейках столбца.
Кроме того, драйвер будет читать все типы файлов Excel, включая .xls, .xlsm и .xlsx - для этого не нужно изменять расширенные свойства из Excel 12.0. Это значительное преимущество.
Более старый Microsoft.Jet.OLEDB.4.0 был хорош тем, что вы могли указать TypeGuessRows и ImportMixedTypes в строке подключения, но Microsoft.ACE.OLEDB.12.0 полностью их игнорирует, поэтому вы можете удалить их из строки подключения, поскольку их присутствие вводит в заблуждение. Старый драйвер может читать только файлы .xls.
Оба драйвера будут читать только 255 столбцов без внесения изменений в оператор SELECT. Чтобы прочитать более 255 столбцов, вы указываете диапазон. Э.Г.
Select * From [Sheet1$IV:SP]
будет читать столбцы 256-510. Если ваш лист заканчивается на DX, он находится в пределах допустимых значений в столбце 255.
Скрытые столбцы всегда возвращаются.
У этого драйвера есть пара гадостей. Во-первых, ведущие пустые строки или столбцы полностью игнорируются. Это может действительно испортить ситуацию, если вы ожидаете данные в определенных строках / столбцах. Во-вторых, Excel неправильно считает 29 февраля 1900 г. допустимой датой, а OLEDB - нет. Вы можете просто вставить 29 февраля 1900 года в электронную таблицу Excel, но OLEDB вернет ее как 28 февраля 1900 года. Я не вижу ничего другого, что могло бы сделать на самом деле.
Драйвер - очень удобный и дешевый способ чтения хорошо отформатированных электронных таблиц Excel, если вы знаете об ограничениях и умеете кодировать их.
Удачи.