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

Seleccione idioma Seleccione idioma
Id. de artículo: 194124 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

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

Propiedades

Id. de artículo: 194124 - Última revisión: jueves, 24 de junio de 2004 - Versión: 4.0
La información de este artículo se refiere a:
  • 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
Palabras clave: 
kbmt kbprb KB194124 KbMtes
Traducción automática
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

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com