PRB: Valores de Excel devueltos como NULL con OpenRecordset de DAO

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 194124
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Síntomas
Cuando se conecte a una hoja de cálculo Excel mediante el método OpenRecordset de DAO, algunos valores en una columna de Excel pueden devolverse como NULL cuando el valor subyacente no es un valor null. Esto normalmente se produce cuando numérico y se mezclar tipos de datos de texto dentro de la misma columna de Excel.
Causa
Este problema se debe a una limitación del controlador ISAM de Excel en que una vez que determina el tipo de datos de una columna de Excel, devolverá un valor NULL para cualquier valor que no es el tipo de datos el controlador ISAM ha predeterminado para esa columna de Excel. El controlador ISAM de Excel, determina el tipo de datos de una columna de Excel examinando los valores reales de las primeras filas y elige entonces un tipo de datos que representa la mayoría de los valores de su muestreo.
Solución
Hay dos soluciones para este comportamiento:
  1. Asegúrese de que los datos en Excel es introducidos como texto. Sólo volver a formatear la columna de Excel a texto no se lograr esto. Vuelva a escribir los valores existentes después de volver a formatear la columna de Excel. En Excel, puede utilizar F5 para volver a escribir valores existentes en la celda seleccionada.
  2. Puede agregar la opción IMEX = 1; a Excel la cadena en el método OpenDatabase de conexión. Por ejemplo:
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _            False, True, "Excel 8.0; HDR=NO; IMEX=1;")						
    Nota: configuración IMEX = 1 indica el controlador que utilizar el modo de importar. En este estado, el registro de configuración de ImportMixedTypes = Text se ser observado. Esto obliga a mixtos datos que se va a convertir en texto. Para que esto funcione correctamente, puede que también tenga que modificar la configuración del registro, TypeGuessRows = 8. El ISAM de controlador de forma predeterminada busca en las primeras ocho filas y de muestreo que determina el tipo de datos. Si este ocho de la fila muestreo es todo numérico, a continuación, establecer IMEX = 1 no convertirá el tipo de datos predeterminado a texto; permanecerá numérico.

    Debe procurar que IMEX = 1 no puede utilizar forma indiscriminada. Se trata de importación anexa modo, por lo que los resultados pueden ser impredecibles si se intenta realizar o actualizaciones de datos de este modo.

    Los valores posibles de IMEX son:
            0 is Export mode        1 is Import mode        2 is Linked mode (full update capabilities)						
    la clave del registro donde se encuentran la configuración se ha descrito anteriormente es:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel

    Consulte la sección referencias de este artículo para obtener información en cuando la hoja de cálculo Excel tiene encabezados de columna de texto con datos numéricos.
Estado
Este comportamiento es por diseño.
Más información

Pasos para reproducir este comportamiento

Para duplicar este problema, cree primero un libro de Excel con una hoja de cálculo Sheet1 de predeterminado. En la primera columna de Sheet1, escriba los siguientes valores - 123, aaa, 456, bbb, 789. Guardar este libro en el directorio C:\Temp y asígnele el nombre Book1.XLS.

En Visual Basic, cree un nuevo proyecto EXE estándar y siga estos pasos:
  1. Hacer una referencia a biblioteca de objetos Microsoft DAO 3.5. En Visual Basic 6.0, esta será la biblioteca de objetos Microsoft DAO 3.51.
  2. Agregue un CommandButton al formulario de nuevo.
  3. Coloque el código siguiente en la sección de declaraciones generales del formulario:
          Dim Db As Database      Dim Rs As Recordset      Private Sub Command1_Click()          Set Rs = Db.OpenRecordset("Sheet1$")          'This will print the spreadsheet Text values as Nulls.          Do While Not Rs.EOF              Debug.Print Rs(0)              Rs.MoveNext          Loop      End Sub      Private Sub Form_Load()          'HDR refers to the Excel header row.      Set Db = OpenDatabase("C:\Temp\Book1.xls", _               False, True, "Excel 8.0; HDR=NO;")      End Sub      Private Sub Form_Unload(Cancel As Integer)          Db.Close          Set Db = Nothing      End Sub						
    ejecutar el proyecto presionando la tecla F5 y observe que en la ventana depuración se imprimen los valores de texto como NULL. Si la mayoría de los valores de la hoja de cálculo Excel texto, se debería invertir el resultado del código anterior. Es decir, los valores numéricos sería volver como valores nulos.
Referencias
Para obtener información adicional, consulte en contacto con el siguiente artículo en Microsoft Knowledge Base:

190195: HOWTO: extraer información de la hoja de Excel con DAO
kbDSupport kbdse hoja de cálculo de libro kbDAO350 kbDAO300 kbDAO250 kbIISAM kbExceL kbVBp400 kbVBp500 kbVBp600 kbVBp kbRegistry

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 194124 - Última revisión: 12/05/2015 09:27:48 - Revisión: 4.0

Microsoft Visual Basic 4.0 Professional Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 4.0 Enterprise Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbnosurvey kbarchive kbmt kbprb KB194124 KbMtes
Comentarios