DBNull na célula não vazia durante a leitura de arquivo do Excel através de OleDB

StackOverflow https://stackoverflow.com/questions/3206915

  •  13-09-2020
  •  | 
  •  

Pergunta

Eu uso OleDB para ler um arquivo do Excel.Uma das colunas tem um "bem Comum" formato e contém seqüências de caracteres com letras e valores consistindo de apenas números.Valores de seqüência de caracteres são recuperados sem problema, mas pura valores numéricos são obtidos como DBNull.

Como resolver?

Eu uso a seguinte seqüência de caracteres de conexão para abrir Arquivo do Excel 2003 (xls):

"Provider=Microsoft.Jet.OLEDB.4.0;
 Data Source=C:\\file.xls;
 Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""
Foi útil?

Solução

Eu encontrei alguns documentação no site da Microsoft que se aplica à sua situação.Eles recomendam a conversão de todos os números para strings.

http://support.microsoft.com/kb/257819

Como mencionado anteriormente, ADO deve adivinhar o tipo de dados para cada coluna no Excel folha de cálculo ou intervalo.(Este não é afetado pelo Excel definições de formatação de célula.) Pode surgir um problema grave se você tem valores numéricos mistos com valores de texto na mesma coluna.O Jet e o Fornecedor de ODBC para retornar os dados da maioria do tipo, mas retornar NULL (vazio) valores para o tipo de dados minoritária.Se os dois tipos são igualmente misturados na coluna, o fornecedor escolhe numérico sobre o texto.

Por exemplo:

* In your eight (8) scanned rows, if the column contains five (5) numeric values and three (3) text values, the provider returns five (5) numbers and three (3) null values.
* In your eight (8) scanned rows, if the column contains three (3) numeric values and five (5) text values, the provider returns three (3) null values and five (5) text values.
* In your eight (8) scanned rows, if the column contains four (4) numeric values and four (4) text values, the provider returns four (4) numbers and four (4) null values.

Outras dicas

Eu tenho o mesmo problema, mas com valores de seqüência de caracteres.Valores numéricos são retornados, mas valores de seqüência de caracteres são retornados como NULL.Eu quero carregar valores numéricos como valores de seqüência de caracteres.A coluna pode conter dígitos e não-numéricos (códigos de exemplo:100344567 e PRD001X01).

O driver do Excel considera que a coluna é do tipo numérico, pois os valores nas 8 primeiras linhas são do tipo numérico.

Mesmo se eu definir as células como Texto (Formato de Célula), ele não funciona.

Para forçar o motorista a "ver" a coluna como seqüência de eu ter simplesmente colocar uma citação na frente do valor numérico ('100344567).Isso transforma o valor numérico em uma seqüência de caracteres.

Este valor de 8 linhas é definido no Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\ -->TypeGuessRows=8.

Espero que ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top