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 OleDBCó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
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
Excelente información.
ResponderEliminardonde le dan la ubicacion del archivo csv para leer help me
ResponderEliminarla 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