Настройка драйвера Access Database Engine

Опубликовано: 20.03.2014
Автор: Виталий Бочкарев
Поддержать автора статьи по этой ссылке

В проекте Конвертация XLS в CSV для доступа к содержимому XLS файлов используется драйвер Microsoft Access Database Engine, который позволяет через источники данных ODBC открывать файлы Excel как базы данных.

На днях я столкнулся с проблеммой, что некоторые значения ячеек из XLS файла игнорируются и не переносятся в CSV файл.

После детального изучения проблемы я понял, что дело в типах данных, которые драйвер Microsoft Access Database Engine присваивает колонкам. По умолчанию драйвер считывает первых 8 строк таблицы файла XLS и на основе этих значений определяет типы данных колонок.

Например, имеется табличка

Артикул Наименование Количество
39981312344 Автостекло на HONDA CIVIC 3/5D HB (ДД+VIN) (2005-) 4,00
70184342345 Автостекло на ROVER 800 4D SED, 5D HB [крепеж] (1991-1998) 2,00
24604324333 Автостекло на BMW X1 5D (2010-) 4,00
86144343523 Автостекло на AUDI Q3 (2011-) 1,00
35784355622 Автостекло на FORD FOCUS III 4D SED, 5D HB, унив. (2011-) 4,00
44413434556 Автостекло на KIA OPTIMA 4D SED (2012-) 4,00
44393453512 Автостекло на KIA PICANTO 5D HB (2011-) 3,00
63125224354 Автостекло на OPEL CORSA D 5D HB (с октября 2006) (2006-) 2,00
8831RGSE5RD Автостекло на VOLVO XC90 5D [крепеж] (2002-) 1,00

В этой таблице первые 8 артикулов состоят только из цифр, следовательно драйвер установит первой колонке числовой тип данных. В 9 строке для стекла VOLVO использован буквенно-цифровой артикул, а так как система уже установила числовой тип данных, то эта ячейка будет проигнорирована, как ошибочная.

Чтобы избежать подобных коллизий, нужно настроить драйвер Access Database Engine не определять тип данных ячеек. Это делается через системный реестр.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel]
"DisabledExtensions"="!xls"
"ImportMixedTypes"="Text"
"FirstRowHasNames"=hex:01
"AppendBlankRows"=dword:00000001
"TypeGuessRows"=dword:00000000

Ключ TypeGuessRows отвечает за то количество строк, которое используется для определения типов данных колонок. По умолчанию используется 8 строк: "TypeGuessRows"=dword:00000008. Чтобы отключить эту функцию, нужно установить "TypeGuessRows"=dword:00000000.

Более подробное описание всех ключей драйвера можно найти на странице msdn.microsoft.com.