2010-07-08 26 views
5

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 constan solo de números. Los valores de cadena se recuperan sin problemas, pero los valores numéricos puros se recuperan como DBNull.DBNull en una celda no vacía al leer el archivo de Excel mediante OleDB

¿Cómo resolver?

utilizo la siguiente cadena de conexión para abrir archivo de Excel 2003 (xls):

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

Respuesta

6

He encontrado algunos documentos en el sitio web de Microsoft que se aplica a su situación. Recomiendan convertir todos los números a cadenas.

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

Como se dijo anteriormente, ADO debe adivinar el tipo de datos para cada columna de la hoja de cálculo Excel o rango. (Esto no se ve afectado por la configuración de formato de celda de Excel.) Puede surgir un problema grave si tiene valores numéricos mezclados con valores de texto en la misma columna. Tanto Jet como el proveedor ODBC devuelven los datos del tipo de mayoría, pero devuelven valores NULL (vacíos) para el tipo de datos minoritario. Si los dos tipos se mezclan por igual en la columna, el proveedor elige texto numérico.

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. 
+3

Agregué 'IMEX = 1' para imponer el modo de texto (necesito recuperar estas celdas como texto no numérico) pero no ayudó. Es imposible volver a ingresar valores en modo texto porque hay muchos de ellos. ¿Es posible automatizarlo de alguna manera? – flashnik

+0

¿Qué sucede si prueba esta sugerencia de utilizar una consulta en lugar de un nombre directo de tabla/hoja? El pequeño inconveniente es que todas las columnas aparecen como cadenas. http://munishbansal.wordpress.com/2009/12/15/importing-data-from-excel-having-mixed-data-types-in-a-column-ssis/ – jdot

1

tengo el mismo problema pero con valores de cadena. Se devuelven valores numéricos, 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 (por ejemplo, 100344567 y PRD001X01).

El controlador de Excel considera que la columna es de tipo numérico 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 controlador a "ver" la columna como una cadena, simplemente he puesto una comilla delante 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 \ Engines \ Excel \ -> TypeGuessRows = 8.

Espero que ayude.

Cuestiones relacionadas