lunes, 22 de marzo de 2010

Cargar rango de Excel en DataGridView

Simple ejemplo para cargar un rango de una hoja de Excel en un
DataGridView

El siguiente es un simple código fuente para poder conectarse a una hoja de un libro, leer un rango de datos y mostrarlos o cargarlos en un control de tipo DataGridView.

Para el ejemplo colocar en un Form los siguientes controles:
  • Un TextBox : llamado txtRange ( Para indicar el rango a cargar en la grilla)
  • Un DataGridView
  • Un control Button
Código fuente
Option Explicit On
Option Strict On

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Button1.Text = "Cargar"
txtRange.Text = "A1:C15"

End Sub

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

' // Pasar valores para Leer el rango
loadRange("c:\book1.xls", "sheet1", txtRange.Text, DataGridView1)

End Sub

' ----------------------------------------------------------------------------------
' // Subrutina para conectar al libro Excel y obtener el rango de datos
' ----------------------------------------------------------------------------------
Private Sub loadRange(ByVal sFileName As String, _
ByVal sSheetName As String,ByVal sRange As String, _
ByVal dv As DataGridView)

Try
' // Comprobar que el archivo Excel existe
If System.IO.File.Exists(sFileName) Then

Dim objDataSet As System.Data.DataSet
Dim objDataAdapter As System.Data.OleDb.OleDbDataAdapter
' // Declarar la Cadena de conexión
Dim sCs As String = "provider=Microsoft.Jet.OLEDB.4.0; " & "data source=" & sFileName & "; Extended Properties=Excel 8.0;"
Dim objOleConnection As System.Data.OleDb.OleDbConnection
objOleConnection = New System.Data.OleDb.OleDbConnection(sCs)

' // Declarar la consulta SQL que indica el libro y el rango de la hoja
Dim sSql As String = "select * from " & "[" & sSheetName & "$" & sRange & "]"
' // Obtener los datos
objDataAdapter = New System.Data.OleDb.OleDbDataAdapter(sSql, objOleConnection)

' // Crear DataSet y llenarlo
objDataSet = New System.Data.DataSet

objDataAdapter.Fill(objDataSet)
' // Cerrar la conexión
objOleConnection.Close()

' // Enlazar DataGrid al Dataset
With dv
.DataSource = objDataSet
.DataMember = objDataSet.Tables(0).TableName
End With
Else
MsgBox("No se ha encontrado el archivo: " & sFileName, MsgBoxStyle.Exclamation)
End If

Exit Sub
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try

End Sub
End Class

Nota. Ejemplo probado con Excel 2000 y Visual basic 2005

1 comentario:

  1. Gracias, no sabes cuanto me costo encontrar esta solución
    Te pasaste =)

    ResponderEliminar