De XLS a MDB

Desde la aparición de VB.NET y a pesar de las grandes prestaciones SQL Express frente al extinto MSDE, una de las inquietudes que en más ocasiones he visto solicitadas por los desarrolladores, ha sido la portabilidad y la manejabilidad de formatos MDB, XLS, TXT, como moneda de cambio entre aplicaciones, a pesar de todo, supongo que continuamos dependiendo de los antiguos compañeros de viaje.

Son muchas las ocasiones en que se pregunta cómo convertir el contenido de un ‘DataGridBView’ a una Base de datos Access o transportar el contenido de una tabla a un Excel. Creo que este ejercicio puede ser útil como punto de entradilla a ese tipo de aplicaciones “Atípicas” J.  Así que finalmente me he decidido por investigar un poquito para poder llegar a ciertas conclusiones y limitaciones del trabajo con MDB’s usando VB 9. Aquí os dejo una muestra de los resultados, ya sabéis que no es habitual en mí, pero no he tenido tiempo de comentar el código y ponerlo bonito, a pesar de ello a todos los que tengáis un especial interés, os animo a contactar, para poder enviaros el proyecto de pruebas.

Veamos entonces como procesar una hoja de cálculo de Excel para crear un nuevo catalogo en una BD, diseñando la tabla a partir de las columnas del ‘DGV’ y rellenándola con el contenido de celdas.

Evidentemente el punto de partida será esta bonita hoja:

Un Simple XLS

 el segundo paso … Nuestro POgrama pa leer lescel!

    Private Sub LeerXls()
        ‘Abrir y llenar el DGV con la hoja de excel
        MiXlsConexion = New OleDbConnection _
        (“Provider=Microsoft.Jet.OLEDB.4.0;” + _
         “Extended Properties = ‘Excel 8.0’;” + _
         “Data Source=|DataDirectory|\libro1.xls;”)
        MiXlsAdaptador = New OleDbDataAdapter(“SELECT * FROM [Hoja1$]”, MiXlsConexion)
        MiXlsConexion.Open()
        MiXlsAdaptador.Fill(MiXlsDataSet)
        MiXlsDGV.DataSource = MiXlsDataSet.Tables(0)
    End Sub

Nuestra Aplicacion

Al pulsar sobre “Generar Archivo” obtendremos …



‘ crear estructura de la tabla en funcion a columnas de la hoja
Dim Campos As String = “Create Table [“ + NombreDe_MiTabla + “] (“
For Each col As DataGridViewTextBoxColumn In MiXlsDGV.Columns
     If Campos.EndsWith(“)”) Then Campos += “, “
     Campos += “[“ + Regex.Replace(col.DataPropertyName, ” “, “_”) + “] Text(50)”
Next
Campos += “)”
Dim MiMandato As New OleDbCommand(Campos, MiMDBConexion)
MiMandato.ExecuteNonQuery()




Dim Registro As DataRow
‘Añadir las filas del DGV a la tabla del DataSet
For Each row As DataGridViewRow In MiXlsDGV.Rows
    If row.Index < MiXlsDGV.RowCount – 1 Then
        Registro = MiMdbDataSet.Tables(0).NewRow
        For Each col As DataGridViewColumn In MiXlsDGV.Columns
            ‘Añadir una entrada por celda
             Registro(col.Index) = row.Cells(col.Index).Value
        Next
        ‘Añadir una linea por fila
        MiMdbDataSet.Tables(0).Rows.Add(Registro)
    End If
Next
MiMdbAdaptador.Update(MiMdbDataSet)

 

Hecho!

Sin trampa ni carton, en la carpeta de la aplicacion veremos aparecer un misterisoso Bd1.Mdb

La Prueba

Los Mas desconfiados podeis hacer clic … e volila!

El Resultado

Saludos,
Pep Lluis,

 

6 Replies to “De XLS a MDB”

  1. Hola PepLluis está interesante tu aporte pero tengo un error en la línea de código que a continuación te detallo:
    Campos += “[” + Regex.Replace(col.DataPropertyName, ” “, “_”) + “] Text(50)”

    El error me indica que no se ha declarado Regex ¿Qué tipo de dato es la variable regex? te agradeceria bastante tu ayuda

    Gracias..

  2. Hi Roy!
    MiXlsDGV is the name of my customized DataGridView… is like drag & drop a DataGridView from toolbox and then change the name at your own name… MyXmlDGV as well default value DataGridView1. Just a name! 🙂

    If you need or are interested in this sample, please contact with me usign [Contact] from top of the page and I will try send you this sample project.

    Thanks for reading,
    Pep Lluis,

  3. Hmmmmmm no me funciona, me da error en
    MiMdbAdaptador.Update(MiMdbDataSet)

    Donde asumo MiMdbAdaptador es el OleDbDataAdapter
    y que antes MiMdbAdaptador.Fill(MiMdbDataSet)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.