Uno de los formatos mas utilizados para extraer e importar información son los archivos CSV que son generados desde Microsoft Excel.
Este código que desarrolle puede importar cualquier archivo que utilice algún tipo de delimitador con esto quiero decir que no importa la extensión.
Colabora y Suscribete a mi canal de
El diseño del formulario seria el siguiente:
Primero el código para seleccionar el archivo para eso se utiliza el componente CommonDialog para abrir un Cuadro de Dialogo para seleccionar el archivo.
Private Sub cmdSeleccionarArchivo_Click() CommonDialog1.Filter = "Archivos de CSV|*.csv" CommonDialog1.ShowOpen If CommonDialog1.FileName <> "" Then txtFileName.Text = CommonDialog1.FileName Else txtFileName.Text = "" End If End Sub
La propiedad Filter del CommonDialog le indicamos el tipo de archivo que puedes leer en este caso CSV pero se le pueden indicar mas tipos de archivo
La propiedad ShowOpen se encarga de abrir el cuadro de dialogo luego que se seleccione el archivo debe validad que se seleccione un archivo validando la propiedad FileName, si no es vacio se lo asignamos al TextoBox.
Eso es todo con la parte de seleccionar el archivo la siguiente parte es importar el archivo pero para esto debe de tener un cvs y una base de datos con los mismos campos en este ejemplo se ve de la siguiente manera.
Ya teniendo tanto el archivo como la base de datos en mi caso la base de datos la llame db.
La parte de la conexión a la base de datos cree un modulo que contiene el siguiente condigo:
Global ConexionADO As New ADODB.Connection Sub AbrirConexion() Dim DireccionDb As String DireccionDb = App.Path & "\Db.accdb" ConexionADO.CursorLocation = adUseClient ConexionADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DireccionDb & ";Jet OLEDB:Database Password=" End Sub
Y esta conexión se abre en el evento Load del Formulario:
Private Sub Form_Load() Call AbrirConexion End Sub
Con la base de datos abierta ya se puede proceder a importar los datos utilizando el botón cmbImportar que contiene el siguiente condigo.
Private Sub cmdImportar_Click() Call ImportarDatos End Sub
El código del procedimiento ImportarDatos es el siguiente:
Sub ImportarDatos() Dim Delimintador As String archivo = txtFileName.Text Delimitador = ";" Open archivo For Input As #1 ' se abre el archivo. num_l = 1 Do While Not EOF(1) ' se valida que no sea el fin del archivo. Line Input #1, DatosLinea ' se lee una linea del archivo. If chkOmitir.Value = 1 And num_l = 1 Then 'si esta activo el check se omite la primera linea Else DatosDivididos = Split(DatosLinea, Delimitador) 'la linea leida se divide en partes utilizando split y el delimitador Call GuardarDatosDb(DatosDivididos(0), DatosDivididos(1), DatosDivididos(2), DatosDivididos(3), DatosDivididos(5), DatosDivididos(4)) End If num_l = num_l + 1 'cuenta el numero de registros Loop Close #1 MsgBox "Datos Importados con exito", vbInformation, "Importar Datos" End Sub
El código esta comentado para que se entienda aquí se nota una función de Visual Basic llamada Split que permite dividir un texto en parte utilizando un delimitador, esta función nos devuelve un arreglo con la partes. En el ejemplo son 6 partes solo que se inicia desde cero.
La logia es simple del código anterior, se abre el archivo se lee la línea, luego divido la línea en partes utilizando el delimitador y luego se pasa a la función que guarda en la base de datos.
Para guardar utilizo el procedimiento GuardarDatosDb que tiene 6 parámetros:
Sub GuardarDatosDb(Id, Nombres, Apellidos, Identificacion, Telefono, Direccion) sql = "Insert Into usuarios (id, nombres, apellidos, identificacion, telefono, direccion ) values (" & Id & ", '" & Nombres & "' " _ & ", '" & Apellidos & "', '" & Identificacion & "', '" & Telefono & "', '" & Direccion & "' ) " ConexionADO.Execute sql End Sub
Y por ultimo el botón Exportar que va a crear un archivo csv con los datos que están en la base de datos.
Private Sub cmdExportar_Click() Call ExportarDatos End Sub
El código anterior llama al procedimiento ExportarDatos:
Sub ExportarDatos() Dim DatosUsuario As New ADODB.Recordset sql = "Select * from usuarios order by ID" Set DatosUsuario = ConexionADO.Execute(sql) Open App.Path & "\datosexportados.csv" For Append As #1 Print #1, "codigo;nombre;apellidos;identificacion;direccion;telefono" 'titulos de las columas Do While Not DatosUsuario.EOF With DatosUsuario Print #1, !Id & ";" & !Nombres & ";" & !Apellidos & ";" & !Identificacion & ";" & !Direccion & ";" & !Telefono End With DatosUsuario.MoveNext Loop Close #1 MsgBox "Datos Exportados con existo", vbInformation, "Exportar" Exit Sub error: MsgBox "Exportar " & Err.Description, vbCritical, "Error al exportar" End Sub
Explicando el código anterior se hace la consulta que trae todos los datos de la tabla usuarios, se abre el archivo en mi caso lo llame “datosexportados.csv” pero lo pueden llamar como quieran. Si el archivo existe va a seguir agregando líneas pero si no existe lo crea.
Luego se hace un recorrido de los registros en cada interacción se arma cada línea del archivo de texto separado por ; y se pasa al siguiente registro haciendo el mismo proceso hasta terminar con todos los registros.
Descarga el Código Exportar Importar archivo CSV (262 descargas )