none
Conectar base de datos en Excel con el archivo abierto??? RRS feed

  • Pregunta

  • Hola.

    Tengo un problema :(

    Quiero vaciar los datos de un Excel a un DataGrid con ASP.NET y VB; la función que tengo lo hace sin problema, pero sucede que debo de tener el archivo de Excel abierto para poderlo leer ya que de otro modo me arroja la Excepción "La tabla externa no tiene el formato esperado."

    Mi código es el siguiente:

     Function cargarBase(archivo As String) As DataTable
            cargarBase = New DataTable
    
            'Variables para Leer Base De datos
            Dim conecta As OleDbConnection
            Dim adapta As OleDbDataAdapter = Nothing
            Dim datos As DataSet = Nothing
            Dim hojas As DataTable
            Dim hojaNom As String = ""
    
            'Conexion
            conecta = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & archivo & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX="0";")
            conecta.Open()
    
            'Obtiene Esquema de Hojas(Tablas)
            hojas = conecta.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
            If hojas.Rows.Count > 1 Then
                MsgBox("La base debe tener sólo 1 hoja.", MsgBoxStyle.Exclamation)
                GoTo libera
            Else
                hojaNom = hojas.Rows(0).Item(2).ToString
            End If
    
            'Adaptador de datos
    adapta = New OleDbDataAdapter("SELECT * FROM [" & hojaNom & "]", conecta)
            
            'Rellena Datos
            datos = New DataSet
            adapta.Fill(datos)
    
            'Llena DataTable
            cargarBase = datos.Tables(0)
    
    libera:
            If Not datos Is Nothing Then datos = Nothing
            If Not adapta Is Nothing Then adapta = Nothing
            hojas = Nothing
            conecta = Nothing
    
            Return cargarBase
        End Function


    viernes, 12 de abril de 2013 22:48

Todas las respuestas

  • Antes de nada te recomiendo que recodifiques tu método para evitar el uso de GoTo libera.

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 13 de abril de 2013 23:47
  • Prueba a poner...

    conecta.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    domingo, 14 de abril de 2013 0:05
  • Gracias por el comentario, de hecho no uso el GoTo, sólo que esta vez sí lo hice, jeje...

    Y sobre el error, este se presenta en la instrucción Open, es decir, cuando llega a conecta.Open() se presenta la Excepción  "La tabla externa no tiene el formato esperado." y tengo que abrir el archivo de Excel y volver a ejecutar la rutina :( y es con el archivo abierto cuando ya no tengo ningún problema...


    domingo, 14 de abril de 2013 3:48
  • Hola Cesar, puedes revisar esto??

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & archivo & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX="0";")

    Me da que no esta bien formateada la cadena de conexión por  IMEX="0"....


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    domingo, 14 de abril de 2013 9:14
  • Como te fue con esto

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 9:37
  • Hola Sergio,

    He probado modificando la cadena de conexión y me sigue arrojando el mismo error :(

     'Conexión
    conecta = New OleDbConnection ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & archivo & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";")
    conecta.Open()

    Debo tener el archivo abierto para que se ejecute correctamente.


    lunes, 15 de abril de 2013 15:26
  • Hola Cesar, qué tal?

    Tengo que preguntarte si has instalado en tu equipo el MSXML 6.0 package

    http://www.microsoft.com/en-us/download/details.aspx?id=3988


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 15:34
  • Instalaste también  2007 Office System Driver: Data Connectivity Components ???

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 15:42
  • Sergio, en efecto tengo ambos componentes instalados.

    lunes, 15 de abril de 2013 15:46
  • Otra consulta.. que tipo de archivo estas intentado abrir? un .xls o un .xlsx??

    Te paso un enlace a otro hilo que se soluciono a ver si es lo que te pasa ok??

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/2bd9e770-7808-480b-832e-31d3b0d43a74/


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    lunes, 15 de abril de 2013 15:48
  • Un .xlsx
    lunes, 15 de abril de 2013 15:49
  • y si probamos a usar esta connectionstring?=?

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";Extended Properties=Excel 12.0;"


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 15:53
  • Ya intenté con el enlace que me comentas y modificando la cadena de conexión, y sigue igual :(
    lunes, 15 de abril de 2013 16:42
  • Se resiste verdad? Se me ocurre que tal vez tenga que ver con la versión de sistema operativo...es de 64 bit??

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 17:02
  • Jajajaja, sí, se sigue resistiendo...

    Estoy trabajando en Win 7 de 64 bits con Office 2007 de 32 bits, sin embargo, tengo instalados los complementos del DataBase Engine, y de hecho tengo otras aplicaciones que también conectan a Excel y no me arroja ningún error...

    Crees que tenga algo que ver con que las otras aplicaciones son Windows Forms y esta es ASP.NET???

    lunes, 15 de abril de 2013 17:13
  • No creo...puede ser que el fichero e Excel que usas tenga algo que no le guste al driver oledb?? Si tiene por ejemplo la primera línea de la primera hoja von un formato raro??

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 17:23
  • El fichero xlsx esta protegido con contraseña??

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 17:41
  • Otra prueba...puedes abrir el fichero con Excel y guardarlo en formato 2003  y hacer la prueba?? Y luego grabalo en formato 2007....

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 17:57
  • Si lo guardo como Excel 2003 lo lee sin problema... Entonces será algo del formato??? Porque ya lo sobrescribí como 2007 y ahí es cuando no funciona...
    lunes, 15 de abril de 2013 18:31
  • Y si creas un fichero Excel desde cero con el formato xlsx y datos que sean validos y probamos?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 18:36
  • Pues ya intenté de todo y sigue sin funcionar si el archivo está cerrado. Ya hasta estoy pensando en poner un mensaje solicitando al usuario que abra su archivo... jajajaja
    lunes, 15 de abril de 2013 21:37
  • Vaya..lo siento. Puedes realizar una captura de pantalla de la hoja del fichero Excel? y por ultimo...podrias reinstalar los componentes  de conectividad?? Saludos

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 15 de abril de 2013 21:53
  • Por cierto..instalaste Microsoft Access Database Engine 2007  Redistributable???  Probemos esto!

    pon IMEX=1 a ver si va


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    lunes, 15 de abril de 2013 22:12