Помощь со строкой подключения OleDB для файлов Excel

Проблема, с которой я столкнулся, заключается в том, что адаптер данных просматривает только первую строку в каждом столбце, чтобы определить тип данных. В моем случае первый столбец «SKU» - это числа для первых 500 строк, тогда у меня есть SKU, которые представляют собой смешанные цифры и буквы. В итоге происходит то, что строки в столбце SKU остаются пустыми, но я по-прежнему получаю другую информацию для каждой строки столбца.

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

Строка подключения:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";


ImportMixedTypes=Text;TypeGuessRows=0

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

Я наложил на это «бандаж», чтобы сделать первую строку в электронной таблице смесью букв и цифр и, в частности, оставить эту строку в моем запросе.


person The Muffin Man    schedule 29.12.2010    source источник
comment
Вы пробовали разных провайдеров, например JET вместо ACE? Посмотрите здесь другие возможные форматы строк подключения: connectionstrings.com/excel   -  person goric    schedule 30.12.2010
comment
Я уже был на этом сайте и все перепробовал. Я бы хотел, чтобы это было лучше. Если они хотят спроектировать систему так, чтобы она занимала длинную строку, им нужно выпустить бесплатный генератор. Фу...   -  person The Muffin Man    schedule 31.12.2010
comment
@theprise JET по-прежнему будет иметь ту же проблему, поскольку все значения, которые необходимо изменить, находятся в реестре и не могут быть установлены из строки подключения.   -  person arcain    schedule 12.01.2011


Ответы (1)


К сожалению, вы не можете установить ImportMixedTypes или TypeGuessRows из строки подключения, поскольку эти параметры определены в реестре. Для драйвера ACE OleDb они хранятся в

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

в реестре. Итак, вы можете упростить строку подключения до:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;""";

Как только вы установите TypeGuessRows в 0 и ImportMixedTypes на Text в реестре, вы должны получить ожидаемое поведение. Однако вы можете рассмотреть возможность использования достаточно большого числа, например 1000, вместо нуля, если вы обнаружите, что производительность импорта не идеальна.

person arcain    schedule 11.01.2011
comment
Просто обратите внимание на всех, кто смотрит на это, если вы используете 64-битную машину, вам нужно добавить Wow6432Node в раздел реестра, чтобы он стал: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel - person amarsuperstar; 06.07.2011
comment
Я редактирую реестр на основе этого ссылка. Он работает в окне xp, но не работает в окне 7. Нужно ли мне указывать Wow6432Node в разделе реестра для 32- или 64-разрядной версии? - person soclose; 12.07.2011
comment
@soclose Ключ HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node присутствует только в 64-битных установках Windows. en.wikipedia.org/wiki/WoW64 - person arcain; 12.07.2011
comment
Есть ли способ сделать это программно? - person Loogawa; 02.03.2013
comment
Один из способов, которым вы могли установить значения с помощью кода, - это использовать класс Microsoft.Win32.Registry, но я бы не советовал делать это на лету непосредственно перед открытием соединения. - person arcain; 02.03.2013
comment
Я искал в своем реестре TypeGuessRows и изменил его с 8 на 0 примерно в 5 разных местах. Это не имеет никакого эффекта. У меня есть столбец с текстом в 1000-й строке, и импорт все еще пытается сделать его плавающим на основе числовых первых нескольких строк. Любые идеи? - person Shock; 04.06.2016
comment
@Shock Я написал макрос, который добавил символ 'в начало каждого столбца, и я вырезал его перед чтением, похоже, он работает нормально. - person Salah Alshaal; 11.10.2016
comment
Кроме того, стоит прочитать osreads anwser - person Fredrick Gauss; 19.06.2017