martes, 16 de marzo de 2010

Exportar Csv (Excel separados por comas) a Microsoft Access

Ejemplo en vb.net que lee un archivo csv delimitado por comas para exportar
los datos a una tabla de MsAccess

El formulario primero lee un archivo csv en un control Listview , para luego insertar los registros a la tabla mediante OleDB


Código fuente
Controles necesarios en el formulario : Listview (Lv), Buton1 y Button2
NameSpaces usados en el código :
  • Imports System.Data.OleDb para exportar
  • Imports System.IO para usar StreamReader y leer las líneas del csv
Option Explicit On

Imports System.Array
Imports System.IO
Imports System.Data.OleDb

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' inicializar el array para los encabezados de columna
Dim aCol() As String = {"Nombre", "Apellido", "Teléfono"}
' cargar el archivo csv en el ListView
'( control listview, path csv, vector, delimitador)
Cargar_Csv(lv, "datos.csv", aCol, ",")
End Sub

Private Sub Cargar_Csv(ByVal lv As ListView, _
ByVal sPathCsv As String,ByVal aColumnHeader As String(), _
ByVal sDelimitador As String)
Try

' verificar que la ruta sea correcta
If File.Exists(sPathCsv) = False Then
MsgBox("No se encontró el archivo: " & sPathCsv)
Exit Sub
End If

With lv

.Columns.Clear() ' eliminar todos los encabezados
.Items.Clear() ' eliminar todos los items cargados

' recorre el vector y añade las cabeceras
For i As Integer = 0 To UBound(aColumnHeader)
.Columns.Add(aColumnHeader(i)).ToString()
Next
.View = View.Details ' vista detalle

' Abre el archivo para leer cada línea
Dim sr As New StreamReader(sPathCsv)
Dim aDatos() As String ' vector para el cvs

' recorrer todas las líneas hasta el final del archivo
Do While (sr.Peek >= 0)
' leer la línea y separar los datos con split
aDatos = sr.ReadLine.Split(sDelimitador)

' listview: Añadir los items y SubItems
''''''''''''''''''''''''''''''''''''''''''''''''
Dim Item As New ListViewItem(aDatos(0).ToString)
For i As Integer = 1 To UBound(aDatos)
With Item
.SubItems.Add(aDatos(i).ToString)
End With
Next
.Items.Add(Item)
Loop
sr.Close() ' cierra el streamReader
End With
' error
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click

Try

If lv.Items.Count = 0 Then
MsgBox("No hay datos para agregar", MsgBoxStyle.Information)
Exit Sub
End If

' Inicializar y abrir la conexión a la base de datos
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=datos.mdb")
cn.Open()

' inicializar el comando para insertar los registros
Dim Comando As New OleDbCommand()
Comando.Connection = cn ' asigna la conexión al OleDbCommand

' Recorrer los items
With lv
For i As Integer = 0 To .Items.Count - 1
' sql
Comando.CommandText = "INSERT INTO " &"tContactos(Nombre,Apellido,Telefono) " & _
"Values('" & .Items(i).Text &"','" & .Items(i).SubItems(1).Text & _
"','" & .Items(i).SubItems(2).Text &"')"
' Ejecutar el sql
Comando.ExecuteNonQuery()
Next
MsgBox("Listo", MsgBoxStyle.Information, "Exportar a Access")
End With
' cierra la conexión
cn.Close()
' errores
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub
End Class

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Button1.Text = "Leer Csv en Listview"
Button2.Text = "Exportar a Ms Aceess"
End Sub

3 comentarios:

  1. donde le dan la ubicacion del archivo csv para leer help me

    ResponderEliminar
  2. la pregunta es donde le dan la ubicacion del archivo csv para leerlo por que yo tengo el archivo csv en el disco local c pero ejecuto el programa dice que no lo encuentra pero si lo dejo dentro del bin si funciona necesito saber donde le doy la ubicacion para cambiarsela

    ResponderEliminar