Pregunta

Yo uso OLEDB para leer un archivo de Excel.Una de las columnas tiene un formato "común" y contiene ambas cadenas con letras y valores que consisten únicamente en números.Los valores de la cadena se recuperan sin problemas, pero los valores numéricos puros se recuperan como DBNull.

¿Cómo resolver?

Yo uso la siguiente cadena de conexión para abrir Excel 2003 Archivo (XLS):

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

¿Fue útil?

Solución

Encontré alguna documentación en el sitio web de Microsoft que se aplica a su escenario.Recomiendan convertir todas las numéricas a las cuerdas.

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

Como se indicó anteriormente, ADO debe adivinar en el tipo de datos para cada columna en su hoja de trabajo o rango de Excel.(Esto no se ve afectado por la configuración de formato de celdas de Excel). Puede surgir un problema grave si tiene valores numéricos mezclados con valores de texto en la misma columna.Tanto el chorro como el proveedor ODBC devuelven los datos del tipo mayoritario, pero devuelven valores NULL (vacíos) para el tipo de datos de minoría.Si los dos tipos se mezclan igualmente en la columna, el proveedor elige numérico sobre el texto.

Por ejemplo:

* 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.

Otros consejos

Tengo el mismo problema pero con valores de cadena.Los valores numéricos se devuelven, pero los valores de cadena se devuelven como NULL.Quiero cargar valores numéricos como valores de cadena.La columna puede contener dígitos y códigos no numéricos (ejemplo: 100344567 y PRD001x01).

El controlador de Excel considera que la columna es de tipo numérica porque los valores en las primeras 8 filas son de tipo numérico.

Incluso si defino las celdas como texto (celda de formato) no funciona.

Para forzar al conductor a "ver" la columna como cadena, simplemente he cotizado en frente del valor numérico ('100344567).Esto convierte el valor numérico en una cadena.

Este valor de 8 filas se define en el Registro HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Motores \ Excel \ -> Typeguessrows= 8.

Espero que lo ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top