none
leer excel para insertar en access RRS feed

  • Pregunta

  • buenos dias

    la verdad soy muy nuevo en progamacion vb .net
    quisiera que me colaboraran para mi aplicacion
    consiste en leer columnas y filas de un archivo excel dinamicamente
    para luego cada uno de esos campos hacer un insert en la base de dato en access

    agradeceria mucho su colaboracion gracias

    lunes, 3 de septiembre de 2012 15:37

Respuestas

  • "zeryama" preguntó:

    > quisiera que me colaboraran para mi aplicacion
    > consiste en leer columnas y filas de un archivo excel dinamicamente
    > para luego cada uno de esos campos hacer un insert en la base de dato en access

    Hola:

    Si hablas de "hacer un insert" digo yo que será porque ya existe la tabla en la base de datos de Access. Si es así, no es necesario leer individualmente las columnas y filas del archivo de Excel para añadir los registros, uno a uno, a la tabla de Access, porque se puede efectuar una inserción masiva de registros, siempre y cuando tanto la hoja de Excel como la tabla de Access TENGAN LA MISMA ESTRUCTURA DE CAMPOS O COLUMNAS, tal y como muestra el siguiente ejemplo:

    Imports System.Data.OleDb
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Ruta del archivo de Excel 2007 o superior.
            Dim rutaExcel As String = "C:\Mis documentos\Libro1.xlsx"
    
            ' Cadena de 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;HDR=Yes';" & _
                "Data Source=" & rutaExcel
    
            ' Nombre de la hoja de cálculo que contiene los datos.
            ' Fíjate que el nombre de la hoja tiene que acabar
            ' con el carácter $, por lo que el nombre completo
            ' tendrá que estar encerrado entre corchetes.
            '
            Dim nombreHojaExcel As String = "[Hoja1$]"
    
            ' Ruta de la base de datos de Access 2007 o superior.
            Dim rutaAccess As String = "C:\Mis documentos\Database1.accdb"
    
            ' Nombre de la tabla de la base de datos de Access
            Dim nombreTablaAccess As String = "Tabla1"
    
            ' Creamos dinánicamente la consulta SQL de inserción masiva
            ' de datos (INSERT INTO).
            '
            Dim sql As String = String.Format( _
                "INSERT INTO {0} IN '{1}' " & _
                "SELECT * FROM {2}", nombreTablaAccess, rutaAccess, nombreHojaExcel)
    
            Try
                ' Establecemos una conexión con el libro de Excel
                Using cnn As New OleDbConnection(cadenaConexionExcel)
    
                    ' Creamos el comando
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
    
                    ' Le especificamos la consulta SQL
                    cmd.CommandText = sql
    
                    ' Abrimos la conexión
                    cnn.Open()
    
                    ' Ejecutamos el comando
                    Dim n As Integer = cmd.ExecuteNonQuery()
    
                    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

    Simplemente tienes que sustituir los valores de las variable declaradas por tus propios valores, para que puedas ejecutar el ejemplo digamos que de una manera dinámica.

    Como no has indicado las versiones de Excel y Access que estás utilizando, yo he supuesto que estás utilizando las versiones más modernas de ambas aplicaciones. Pero si a pesar de los años transcurridos, aún sigues utilizando versiones inferiores a Excel y Access 2007, ésta será la cadena de conexión con el libro de Excel que deberás de utilizar:

            ' Cadena de conexión con el archivo de Excel
            ' inferior a Excel 2007.
            Dim cadenaConexionExcel As String = _
                "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Extended Properties='Excel 8.0;HDR=Yes';" & _
                "Data Source=" & rutaExcel

    Por supuesto, si utilizas ésta última cadena de conexión, tal y como está escrita la consulta SQL del ejemplo anterior, la base de datos de Access también deberá ser inferior a Access 2007.

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    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, activa la instrucción Option Strict.

    jueves, 28 de marzo de 2013 8:11
    Moderador
  • un pequeño trozo de código para que veas, revísalo y me comentas...

    Dim buscaarchivo AsNewOpenFileDialog             buscaarchivo.Title = "Cargar archivo de parametros desde XLS"             buscaarchivo.Filter = "Archivo de excel|*.xls"If buscaarchivo.ShowDialog = Windows.Forms.DialogResult.OK ThenDim cnnodbc AsNewOdbcConnection("Dsn=Excel files;dbq=" & buscaarchivo.FileName & ";driverid=790;maxbuffersize=2048;pagetimeout=10")                 cnnodbc.Open()                 conectabd()                 Dim comodbc AsNewOdbcCommand("", cnnodbc)                 Dim leeodbc AsOdbcDataReaderDim grabados AsInteger = 0                                 comodbc.CommandType = CommandType.Text                 comodbc.CommandText = "select * from [REGIONES$]"                 leeodbc = comodbc.ExecuteReader                 While leeodbc.Read                     comm.CommandText = "insert into param_REGION values('" & leeodbc.GetValue(0) & "','" & leeodbc.GetString(1) & "')"                     grabados += comm.ExecuteNonQuery                 EndWhile

                                                                        

    A.E.M.C. ____________________________________________________________ Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

    miércoles, 27 de marzo de 2013 19:35

Todas las respuestas

  • un pequeño trozo de código para que veas, revísalo y me comentas...

    Dim buscaarchivo AsNewOpenFileDialog             buscaarchivo.Title = "Cargar archivo de parametros desde XLS"             buscaarchivo.Filter = "Archivo de excel|*.xls"If buscaarchivo.ShowDialog = Windows.Forms.DialogResult.OK ThenDim cnnodbc AsNewOdbcConnection("Dsn=Excel files;dbq=" & buscaarchivo.FileName & ";driverid=790;maxbuffersize=2048;pagetimeout=10")                 cnnodbc.Open()                 conectabd()                 Dim comodbc AsNewOdbcCommand("", cnnodbc)                 Dim leeodbc AsOdbcDataReaderDim grabados AsInteger = 0                                 comodbc.CommandType = CommandType.Text                 comodbc.CommandText = "select * from [REGIONES$]"                 leeodbc = comodbc.ExecuteReader                 While leeodbc.Read                     comm.CommandText = "insert into param_REGION values('" & leeodbc.GetValue(0) & "','" & leeodbc.GetString(1) & "')"                     grabados += comm.ExecuteNonQuery                 EndWhile

                                                                        

    A.E.M.C. ____________________________________________________________ Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

    miércoles, 27 de marzo de 2013 19:35
  • "zeryama" preguntó:

    > quisiera que me colaboraran para mi aplicacion
    > consiste en leer columnas y filas de un archivo excel dinamicamente
    > para luego cada uno de esos campos hacer un insert en la base de dato en access

    Hola:

    Si hablas de "hacer un insert" digo yo que será porque ya existe la tabla en la base de datos de Access. Si es así, no es necesario leer individualmente las columnas y filas del archivo de Excel para añadir los registros, uno a uno, a la tabla de Access, porque se puede efectuar una inserción masiva de registros, siempre y cuando tanto la hoja de Excel como la tabla de Access TENGAN LA MISMA ESTRUCTURA DE CAMPOS O COLUMNAS, tal y como muestra el siguiente ejemplo:

    Imports System.Data.OleDb
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Ruta del archivo de Excel 2007 o superior.
            Dim rutaExcel As String = "C:\Mis documentos\Libro1.xlsx"
    
            ' Cadena de 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;HDR=Yes';" & _
                "Data Source=" & rutaExcel
    
            ' Nombre de la hoja de cálculo que contiene los datos.
            ' Fíjate que el nombre de la hoja tiene que acabar
            ' con el carácter $, por lo que el nombre completo
            ' tendrá que estar encerrado entre corchetes.
            '
            Dim nombreHojaExcel As String = "[Hoja1$]"
    
            ' Ruta de la base de datos de Access 2007 o superior.
            Dim rutaAccess As String = "C:\Mis documentos\Database1.accdb"
    
            ' Nombre de la tabla de la base de datos de Access
            Dim nombreTablaAccess As String = "Tabla1"
    
            ' Creamos dinánicamente la consulta SQL de inserción masiva
            ' de datos (INSERT INTO).
            '
            Dim sql As String = String.Format( _
                "INSERT INTO {0} IN '{1}' " & _
                "SELECT * FROM {2}", nombreTablaAccess, rutaAccess, nombreHojaExcel)
    
            Try
                ' Establecemos una conexión con el libro de Excel
                Using cnn As New OleDbConnection(cadenaConexionExcel)
    
                    ' Creamos el comando
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
    
                    ' Le especificamos la consulta SQL
                    cmd.CommandText = sql
    
                    ' Abrimos la conexión
                    cnn.Open()
    
                    ' Ejecutamos el comando
                    Dim n As Integer = cmd.ExecuteNonQuery()
    
                    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

    Simplemente tienes que sustituir los valores de las variable declaradas por tus propios valores, para que puedas ejecutar el ejemplo digamos que de una manera dinámica.

    Como no has indicado las versiones de Excel y Access que estás utilizando, yo he supuesto que estás utilizando las versiones más modernas de ambas aplicaciones. Pero si a pesar de los años transcurridos, aún sigues utilizando versiones inferiores a Excel y Access 2007, ésta será la cadena de conexión con el libro de Excel que deberás de utilizar:

            ' Cadena de conexión con el archivo de Excel
            ' inferior a Excel 2007.
            Dim cadenaConexionExcel As String = _
                "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Extended Properties='Excel 8.0;HDR=Yes';" & _
                "Data Source=" & rutaExcel

    Por supuesto, si utilizas ésta última cadena de conexión, tal y como está escrita la consulta SQL del ejemplo anterior, la base de datos de Access también deberá ser inferior a Access 2007.

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    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, activa la instrucción Option Strict.

    jueves, 28 de marzo de 2013 8:11
    Moderador
  • HUY MUCHISISISIMAS GRACIAS CON LOS DOS CODIGOS LOGRE SOLUCIONAR MIS DUDAS FUE MUCHO MAS SENSILLO DE LO QUE PENSE Y SI ME HACIA FALTA LO MAS LOGICO TENER LA MISMA ESTRUCTURA EN LA TABLA Y EL FORMATO DE LA HOJA DEL XLS.

    GRACIASSSS............ :)


    sergio marin

    • Propuesto como respuesta VISANCOR74 domingo, 21 de abril de 2013 3:51
    • Votado como útil VISANCOR74 domingo, 21 de abril de 2013 3:52
    lunes, 1 de abril de 2013 1:02