none
Importar datos de libro de excel a acces RRS feed

  • Pregunta

  • Buen día,

    Tengo un archivo de excel el cual necesito almacenar su información en una base de datos de acces mediante visual studio 2010 ,soy nuevo programando y la verdad no se como hacerlo ya he visto varios ejemplos por internet pero ninguno me ha funcionado

    viernes, 7 de abril de 2017 15:42

Respuestas

  • "Paolo M M" escribió:

    > Tengo un archivo de excel el cual necesito almacenar su información en una base
    > de datos de acces mediante visual studio 2010 ,soy nuevo programando y la verdad
    > no se como hacerlo ya he visto varios ejemplos por internet pero ninguno me ha
    > funcionado

    Hola, Paolo:

    Habrá que ver los ejemplos que has visto por Internet para que ninguno de ellos te funcione. ;-)

    Te comento que puedes importar/exportar a Access aquellos datos de Excel que tengan una estructura tabular, es decir, que se asemejen a una tabla cualquiera de una base de datos, por lo que en principio puedes exportar hojas de cálculo completas individuales y rangos de celdas con o sin nombre también individuales.

    Échale un vistazo a las respuestas que encontrarás en la siguiente conversación:

    importar datos de hoja de excel a tabla access desde mi formlario VB.NET 2012

    Y te puedo asegurar que los ejemplos que aparecen funcionan a la perfección, siempre y cuando se den las circunstancias que en ellos se indican y el equipo tenga instalada la versión del ISAM de Excel correspondiente al motor de datos de Access que desees utilizar, claro está. De lo contrario, me parece a mí que va a ser complicado que puedas importar/exportar datos de Excel a Access o viceversa. ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    viernes, 7 de abril de 2017 17:16
    Moderador
  • "Paolo M M" preguntó:

    > ... pero si deseo que la base y el archivo excel se guarden dentro de la
    > carpeta de la aplicación como lo haría ya que en el ejemplo la ruta es
    > especifica.

    Pues tendrías que especificar la ruta de los archivos de Excel y Access de manera dinámica en lugar de especificarlos de una manera estática:

        ' Ruta con un archivo de Excel llamado Libro1.xlsx que se encuentra en la misma
        ' carpeta que contiene el ejecutable de nuestra aplicación
        '
        Dim libroExcel As String = IO.Path.Combine(Application.StartupPath, "Libro1.xlsx")
    
        ' Ruta con el archivo de Access llamado Database1.accdb que se encuentra en la
        ' misma carpeta que contiene el ejecutable de nuestra aplicación
        '
        Dim archivoAccess As String = IO.Path.Combine(Application.StartupPath, "Database1.accdb")
    

    En esas dos variables tienes las rutas completas a los archivos de Excel y Access que se encuentran en la misma carpeta que el ejecutable de tu aplicación. Ahora, solamente tienes que insertar el nombre de las variables en el lugar apropiado.

    Por ejemplo, la cadena de conexión con el archivo de Excel sería la siguiente:

        Dim cadenaConexionExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Extended Properties='Excel 12.0 Xml;';" & _
        "Data Source=" & libroExcel

    Y en la consulta SQL de datos añadidos especificarías la ruta del archivo de Access como indico a continuación:

        ' Indicamos que nuestra intención es insertar en la tabla Clientes
        ' de la base de datos de Access todos los registros existentes en
        ' la hoja de cálculo llamado Hoja1 del libro de Excel.
        '
        cmd.CommandText = String.Format("INSERT INTO Clientes IN '{0}' SELECT * FROM [{1}$]", archivoAccess, "Hoja1")

    Observa que también puedes especificar de manera dinámica el nombre de la hoja de cálculo del Libro de Excel que desees utilizar: Hoja1, Hoja2, Clientes, etc., sin necesidad de finalizar el nombre con el carácter $, ya que éste se añadirá de manera automática y encerrado entre corchetes, porque para eso hacemos uso del método String.Format.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    martes, 11 de abril de 2017 6:39
    Moderador
  • "Paolo M M" preguntó:

    > tengo una duda si quiero exportar a excel desde el acces pero solo ciertas
    > columnas no todas las que tengo en la tabla clientes ,...

    Según tu pregunta inicial, creía que deseabas pasar a Access los datos que tienes en Excel, pero no al contrario:

    [...] Tengo un archivo de excel el cual necesito almacenar su información en una base de datos de acces [...]

    De todas maneras, deberías de saber que a cualquier consulta de datos añadidos (INSERT INTO) le puedes especificar los nombres de aquellas columnas cuyos datos deseas insertar en Excel, Access, SQL Server, o cualquier otra base de datos diferente:

        Imports System.Data.OleDb
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Ruta con un archivo de Excel llamado Libro1.xlsx que se encuentra en la misma
            ' carpeta que contiene el ejecutable de nuestra aplicación
            '
            Dim libroExcel As String = IO.Path.Combine(Application.StartupPath, "Libro1.xlsx")
    
            ' Ruta con el archivo de Access llamado Database1.accdb que se encuentra en la
            ' misma carpeta que contiene el ejecutable de nuestra aplicación
            '
            Dim archivoAccess As String = IO.Path.Combine(Application.StartupPath, "Database1.accdb")
    
            ' Establecemos una conexión con el archivo
            ' de Excel 2007 o superior.
            '
            Dim cadenaConexionExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                 "Extended Properties='Excel 12.0 Xml;';" & _
                  "Data Source=" & libroExcel
    
            Try
                 Using cnn As New OleDbConnection(cadenaConexionExcel)
    
                    ' Creamos y configuramos el comando.
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
    
                    ' Indicamos que nuestra intención es insertar en la Hoja1 del libro
                    ' de Excel los datos correspondientes al Identificador de Cliente,
                    ' su nombre, domicilio y teléfono de contacto de todos los registros
                    ' existentes en la tabla Clientes de la base de Access
                    '
                    cmd.CommandText = "INSERT INTO [Hoja1$] " & _
                          "SELECT IdCliente, Nombre, Domicilio, Telefono FROM Clientes " & _
                          "IN ''[MS Access;DATABASE=" & archivoAccess & "]"                     
    
                    ' Abrimos la conexión
                    cnn.Open()
    
                    ' Ejecutamos la consulta INSERT INTO
                    Dim n As Integer = cmd.ExecuteNonQuery()
    
                    ' Mostramos el resultado
                    '
                    MessageBox.Show("Nº de registros insertados: " & CStr(n))
    
                End Using
    
            Catch ex As Exception
                 ' Se ha producido un error
                 MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Comentarte que en el siguiente artículo encontrarás toda la información necesaria sobre el ISAM de Excel del motor de datos de Access. Lo único que tienes que hacer es adaptar el código de los ejemplos a ADO .NET, porque la sintaxis de las consultas SQL de selección y acción que aparecen en los distintos ejemplos son las mismas en ADO clásico que en ADO .NET.

    Trabajar con ADO, DAO y Excel


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    miércoles, 12 de abril de 2017 10:53
    Moderador

Todas las respuestas

  • "Paolo M M" escribió:

    > Tengo un archivo de excel el cual necesito almacenar su información en una base
    > de datos de acces mediante visual studio 2010 ,soy nuevo programando y la verdad
    > no se como hacerlo ya he visto varios ejemplos por internet pero ninguno me ha
    > funcionado

    Hola, Paolo:

    Habrá que ver los ejemplos que has visto por Internet para que ninguno de ellos te funcione. ;-)

    Te comento que puedes importar/exportar a Access aquellos datos de Excel que tengan una estructura tabular, es decir, que se asemejen a una tabla cualquiera de una base de datos, por lo que en principio puedes exportar hojas de cálculo completas individuales y rangos de celdas con o sin nombre también individuales.

    Échale un vistazo a las respuestas que encontrarás en la siguiente conversación:

    importar datos de hoja de excel a tabla access desde mi formlario VB.NET 2012

    Y te puedo asegurar que los ejemplos que aparecen funcionan a la perfección, siempre y cuando se den las circunstancias que en ellos se indican y el equipo tenga instalada la versión del ISAM de Excel correspondiente al motor de datos de Access que desees utilizar, claro está. De lo contrario, me parece a mí que va a ser complicado que puedas importar/exportar datos de Excel a Access o viceversa. ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    viernes, 7 de abril de 2017 17:16
    Moderador
  • Muchas gracias verifique y funciono perfectamente pero si deseo que la base y el archivo excel se guarden dentro de la  carpeta de la aplicación como lo haría ya que en el ejemplo la ruta es especifica.
    lunes, 10 de abril de 2017 22:17
  • "Paolo M M" preguntó:

    > ... pero si deseo que la base y el archivo excel se guarden dentro de la
    > carpeta de la aplicación como lo haría ya que en el ejemplo la ruta es
    > especifica.

    Pues tendrías que especificar la ruta de los archivos de Excel y Access de manera dinámica en lugar de especificarlos de una manera estática:

        ' Ruta con un archivo de Excel llamado Libro1.xlsx que se encuentra en la misma
        ' carpeta que contiene el ejecutable de nuestra aplicación
        '
        Dim libroExcel As String = IO.Path.Combine(Application.StartupPath, "Libro1.xlsx")
    
        ' Ruta con el archivo de Access llamado Database1.accdb que se encuentra en la
        ' misma carpeta que contiene el ejecutable de nuestra aplicación
        '
        Dim archivoAccess As String = IO.Path.Combine(Application.StartupPath, "Database1.accdb")
    

    En esas dos variables tienes las rutas completas a los archivos de Excel y Access que se encuentran en la misma carpeta que el ejecutable de tu aplicación. Ahora, solamente tienes que insertar el nombre de las variables en el lugar apropiado.

    Por ejemplo, la cadena de conexión con el archivo de Excel sería la siguiente:

        Dim cadenaConexionExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Extended Properties='Excel 12.0 Xml;';" & _
        "Data Source=" & libroExcel

    Y en la consulta SQL de datos añadidos especificarías la ruta del archivo de Access como indico a continuación:

        ' Indicamos que nuestra intención es insertar en la tabla Clientes
        ' de la base de datos de Access todos los registros existentes en
        ' la hoja de cálculo llamado Hoja1 del libro de Excel.
        '
        cmd.CommandText = String.Format("INSERT INTO Clientes IN '{0}' SELECT * FROM [{1}$]", archivoAccess, "Hoja1")

    Observa que también puedes especificar de manera dinámica el nombre de la hoja de cálculo del Libro de Excel que desees utilizar: Hoja1, Hoja2, Clientes, etc., sin necesidad de finalizar el nombre con el carácter $, ya que éste se añadirá de manera automática y encerrado entre corchetes, porque para eso hacemos uso del método String.Format.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    martes, 11 de abril de 2017 6:39
    Moderador
  • Buen día muchas gracias por tu respuesta,tengo una duda si quiero exportar a excel desde el acces pero solo ciertas columnas no todas las que tengo en la tabla clientes ,ya que el nuevo excel lo tengo que completar con datos de otra tabla de la misma base y ademas realizar unas operaciones para calcular datos que también debe ir en el excel nuevo.
    • Editado Paolo M M martes, 11 de abril de 2017 16:44
    martes, 11 de abril de 2017 16:40
  • "Paolo M M" preguntó:

    > tengo una duda si quiero exportar a excel desde el acces pero solo ciertas
    > columnas no todas las que tengo en la tabla clientes ,...

    Según tu pregunta inicial, creía que deseabas pasar a Access los datos que tienes en Excel, pero no al contrario:

    [...] Tengo un archivo de excel el cual necesito almacenar su información en una base de datos de acces [...]

    De todas maneras, deberías de saber que a cualquier consulta de datos añadidos (INSERT INTO) le puedes especificar los nombres de aquellas columnas cuyos datos deseas insertar en Excel, Access, SQL Server, o cualquier otra base de datos diferente:

        Imports System.Data.OleDb
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Ruta con un archivo de Excel llamado Libro1.xlsx que se encuentra en la misma
            ' carpeta que contiene el ejecutable de nuestra aplicación
            '
            Dim libroExcel As String = IO.Path.Combine(Application.StartupPath, "Libro1.xlsx")
    
            ' Ruta con el archivo de Access llamado Database1.accdb que se encuentra en la
            ' misma carpeta que contiene el ejecutable de nuestra aplicación
            '
            Dim archivoAccess As String = IO.Path.Combine(Application.StartupPath, "Database1.accdb")
    
            ' Establecemos una conexión con el archivo
            ' de Excel 2007 o superior.
            '
            Dim cadenaConexionExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                 "Extended Properties='Excel 12.0 Xml;';" & _
                  "Data Source=" & libroExcel
    
            Try
                 Using cnn As New OleDbConnection(cadenaConexionExcel)
    
                    ' Creamos y configuramos el comando.
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
    
                    ' Indicamos que nuestra intención es insertar en la Hoja1 del libro
                    ' de Excel los datos correspondientes al Identificador de Cliente,
                    ' su nombre, domicilio y teléfono de contacto de todos los registros
                    ' existentes en la tabla Clientes de la base de Access
                    '
                    cmd.CommandText = "INSERT INTO [Hoja1$] " & _
                          "SELECT IdCliente, Nombre, Domicilio, Telefono FROM Clientes " & _
                          "IN ''[MS Access;DATABASE=" & archivoAccess & "]"                     
    
                    ' Abrimos la conexión
                    cnn.Open()
    
                    ' Ejecutamos la consulta INSERT INTO
                    Dim n As Integer = cmd.ExecuteNonQuery()
    
                    ' Mostramos el resultado
                    '
                    MessageBox.Show("Nº de registros insertados: " & CStr(n))
    
                End Using
    
            Catch ex As Exception
                 ' Se ha producido un error
                 MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Comentarte que en el siguiente artículo encontrarás toda la información necesaria sobre el ISAM de Excel del motor de datos de Access. Lo único que tienes que hacer es adaptar el código de los ejemplos a ADO .NET, porque la sintaxis de las consultas SQL de selección y acción que aparecen en los distintos ejemplos son las mismas en ADO clásico que en ADO .NET.

    Trabajar con ADO, DAO y Excel


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    miércoles, 12 de abril de 2017 10:53
    Moderador