Изменение значений при импорте из Excel с помощью C # / OLEDB

Я пытаюсь импортировать некоторые данные из электронной таблицы Excel в свое приложение C # с помощью OleDB. Я использую стандартную строку подключения с параметрами IMEX=1,HDR=YES

Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {0}; Extended Properties = "Excel 12.0; HDR = YES; IMEX = 1"

У меня есть столбец, где значения в основном текст: ИСТИНА или ЛОЖЬ. Внизу есть пара значений BLANK. Когда происходит импорт, значения BLANK заменяются пустыми строками. Вероятно, это связано с тем, что OleDB определила тип данных столбца как логический и не импортирует никаких небулевых значений, таких как BLANK.

Я попробовал решение в этот ответ, но он не сработал. Даже когда я предварительно создаю DataTable и устанавливаю для всех его столбцов тип данных string, значения BLANK продолжают удаляться.

Я попытался взломать ключ реестра, предложенный в том же вопросе, но безрезультатно.

Есть ли выход? Или мне придется попробовать использовать COM? У нас нет бюджета на SpreadsheetGear, и я не могу использовать excellibrary, потому что у меня есть в основном для работы с файлами .xlsx.

заранее спасибо


person Jeffrey Cameron    schedule 16.09.2010    source источник
comment
Удачи в этом? У меня аналогичная проблема.   -  person Factor Mystic    schedule 29.11.2010


Ответы (2)


Попробуйте сохранить файл Excel в формате CSV и обработать его.

person Max    schedule 29.03.2011

Я знаю, что опаздываю на три года, но это может кому-то помочь. Вся заслуга принадлежит Эндрю Гаррисону, который опубликовал свой ответ здесь. Вам необходимо изменить параметр реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\

Измените TypeGuessRows на 0 и ImportMixedTypes на Text под этим ключом.

ACE просматривает первые 8 строк и пытается угадать форматы столбцов. Все остальное, что не соответствует формату, впоследствии возвращается как NULL. Установка TypeGuessRow на 0 заставляет драйвер сканировать все строки для определения формата (конечно, это снижает производительность). ImportMixedTypes = text указывает, что столбцы со смешанным форматом, как в вашем случае, должны быть импортированы как текст.

person Alex Polkhovsky    schedule 04.02.2013