Está en la página 1de 4

Cmo importar una hoja de Excel a un DataGridView en .

Net By Sk0rpy0 La siguiente gua puede servir para aquellos que por algn motivo necesitan tomar informacin de algn documento de Excel y pasarla a un datagridview (DGV) para realizar distintas acciones. El propsito es aprender que cdigo utilizar para poder lograr lo anterior; el uso que hagan con la informacin ya es otra historia =) Esta mini gua est orientada para quienes comienzan en el mundo del desarrollo de .Net bajo Visual Basic, teniendo nociones bsicas sobre la creacin de proyectos y conocimiento de los nombres de controles. Lo primero que tenemos que hacer es crear una nueva aplicacin WindowsForm e incrustrar los siguientes elementos: Un Textbox que llamaremos: txtLoad Tres botones que llamaremos: btnLoad, btnVisualize, btnClose y con la propiedad Text igual a Cargar Archivo, Visualizar y Salir respectivamente Un DataGridView que llamaremos: dgvExcel Un elemento llamado OpenFileDialog que se encuentra en nuestro toolbox en la parte de Dialogs. Una vez que lo insertemos en la forma cambiemos su nombre por OpenFileDialog. Por ltimo cambiemos el nombre de nuestra forma por frmReadExcel

Bien, hasta aqu hemos terminado con los elementos bsicos necesarios para el funcionamiento de la forma, adicionalmente pueden agregar paneles, picturebox, etc., para que la aplicacin sea ms vistosa =)

Comenzando con la Codificacin Comenzaremos por importar las clases OleDB y Xml. La primera es para poder instanciar ms adelante nuestro data adapter y data set; la segunda para permitirnos usar comentarios en un formato un poco ms ordenado. Para hacer esto nos vamos a la parte superior de nuestra clase y tecleamos lo siguiente:
Imports System.Data.OleDb Imports System.Xml

Tambin vamos a declarar una variable pblica tipo string para manejar el nmero de hoja a desplegar. La declaramos justo debajo del nombre de la clase principal:
Public Class frmReadExcel Dim sheetNo As String

Lo siguiente es dar doble clic sobre nuestro botn btnLoad para poner el cdigo que nos abra un cuadro de dilogo donde buscaremos nuestro archivo de Excel. Establecemos .xls como extensin predeterminada y asignamos la ruta completa al texbox txtLoad :
''' <summary> ''' Evento Click del botn "Cargar Archivo" ''' </summary> ''' <remarks>Se encarga de abrir un cuadro de dialogo para buscar el archivo xls que deseamos visualizar y lo asignamos al texbox</remarks> Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click OpenFileDialog.DefaultExt = "*.xls" OpenFileDialog.Filter = "Excel | *.xls" If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub txtLoad.Text = OpenFileDialog.FileName End Sub

Ahora vamos a poner el cdigo de nuestro botn btnVisualize que se va a encargar de mandar llamar al procedimiento LoadExcel pasndo tres parmetros necesarios que son: el grid donde se va a desplegar la informacin, la ruta de nuestro libro de Excel y la Hoja del libro que se quiere desplegar
''' <summary> ''' Evento Click del botn "Visualizar Excel" ''' </summary> ''' <remarks>Se presenta un inputbox solicitando que nmero de hoja se quiere visualizar en el grid ''' y posteriormente se manad llamar al procedimiento LoadExcel</remarks> Private Sub btnVisualize_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVisualize.Click sheetNo = InputBox("Escriba el NUMERO de hoja (Sheet) que desea visualizar en el DataGrid", "Carga de Datos al Grid", "1") LoadExcel(dgvExcel, txtLoad.Text, "Sheet" + sheetNo)

End Sub

Por ltimo vamos a poner el cdigo del procedimiento encargado de desplegar la informacin obtenida en el grid.
''' <summary> ''' Procedimiento para efectuar el despliegue de Excel al DataGridView ''' </summary> ''' <param name="dgvExcel">Nuestro DataGridView</param> ''' <param name="SBook">La ruta del archivo de excel</param> ''' <param name="sSheet">El nombre de la hoja a desplegar en el DGV</param> ''' <remarks>Este procedimiento recibe tres parametros con los cuales crea un DataAdapter ''' para llenar un DataSet y pasarlo al DGV para que se despliegue la informacin</remarks> Sub LoadExcel(ByVal dgvExcel As DataGridView, ByVal SBook As String, ByVal sSheet As String) Dim cs As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & SBook & ";" & "Extended Properties=""Excel 8.0;HDR=YES""" Try Dim cn As New OleDbConnection(cs) 'Connection String If Not System.IO.File.Exists(SBook) Then 'Si no encuentra un libro .xls MsgBox("No se encontr el Libro: " & SBook, MsgBoxStyle.Critical, "Ruta invlida") Exit Sub End If 'sSheet es el nombre de la hoja Dim DA As New OleDbDataAdapter("Select * From [" & sSheet & "$]", cs) Dim DS As New DataSet DA.Fill(DS) 'Se intenta llenar con "Sheet(sheetNo)$" 'Cuando se ha encontrado la hoja a desplegar se pasa la informacin al DGV dgvExcel.DataSource = DS.Tables(0) Catch ex As Exception MessageBox.Show("No se encontr la hoja " & sheetName & " en el libro de excel, por favor verifique los datos", "Error al visualizar el documento", MessageBoxButtons.OK, MessageBoxIcon.Information) End Try End Sub

Con esto ya seremos capaces de leer una hoja de un documento xls y desplegar su informacin en un DataGridView. Aqu les dejo un screenshot de cmo podra quedar:

Algunas Consideraciones y aspectos a tomar en cuenta Este cdigo puede y debe adaptarse para necesidades especficas de quien lo desee. Si analizamos el cdigo, slo leer aquellos documentos de Excel en donde el nombre de las hojas sean Sheet1, Sheet2, Sheet3, etctera queda como tarea para ustedes el implementar el cdigo necesario para manejar documentos xls en espaol con Hoja1, Hoja2, Hoja3, etctera; o bien con nombres de hoja especficos =) Para quien lo desee les dejo un link de descarga de mi cdigo, donde ya esta implementado lo anterior en http://www.4shared.com/file/56200112/c1d5227a/ReadExcel.html (el pass es: ComunidadDragonJAR)

See ya!! Sk0rpy0 at http://my.opera.com/Skorpyo