Чтение смешанного типа данных Excel без изменения ключа реестра - PullRequest
8 голосов
/ 30 марта 2012

Я пытаюсь использовать C # для чтения файла Excel, который имеет смешанный тип данных. Ниже моя строка подключения

var path = //xls location
var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;IMEX=1;'");

Исследования научили меня, что полный Extended Properties в строке соединения должен быть

Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text

Однако мне сообщили, что в строке подключения TypeGuessRows=0 не имеет значения , так как значение будет , полученное непосредственно из реестра . Поэтому мне нужно изменить ключ вручную и удалить это свойство из строки подключения.

Конкретный ключ реестра, который был задействован:

Путь:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

Key:

TypeGuessRows

Исходное значение = 8 , чтобы заставить его работать, измените на = 0

Без этого IMEX не будет работать, даже если я добавлю TypeGuessRows=0 в Extended Properties.

Однако моя компания запрещает изменять значение реестра (строго). Мне сказали найти альтернативы для этого.

Короче говоря:

Есть ли способ читать смешанный тип данных excel файл без , требующий изменения любого ключа реестра (что является довольно распространенной практикой)?

Дополнительная тема:

Вы уже испытывали это раньше? Существуют ли возможности, которые мы можем установить TypeGuessRows=0 только из строки подключения, не изменяя ключ реестра (отменив мою вышеуказанную предпосылку).

Если что-то не получается с OleDb:

Есть ли альтернативы OleDb?

Я ценю любые советы или предложения.

Привет

Ответы [ 2 ]

8 голосов
/ 13 сентября 2012

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

var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1;'");

Ключ здесь должен установить HDR = Нет (БЕЗ ГОЛОВКИ)Однако, поскольку теперь у вас есть заголовок, каждый столбец будет обрабатываться как строка (текст), и вы можете выполнить анализ или проверку для каждого значения ячейки.Конечно, вам нужно будет пропустить или удалить первую строку, так как она содержит информацию заголовка.

2 голосов
/ 03 апреля 2012

Вместо использования OleDb я знаю, использовать Excel Data Reader . Работает отлично! Настоятельно рекомендуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...