Imports System.Data.OleDb 'We're gonna import this class to manage OleDb
Imports System.Xml 'This class allow us to use XML Comments
''' <summary>
''' Main Class para cargar y visualizar el archivo Excel
''' </summary>
''' <remarks>Esta forma se encargará de cargar un archivo con extensión xls y desplegar el contenido
''' en un datagridview</remarks>
Public Class frmReadExcel
Dim sheetNo As String
Dim sheetName As String
''' <summary>
''' Evento Load de la forma principal
''' </summary>
''' <remarks>Se hacen ajustes de visibilidad de elementos</remarks>
Private Sub frmReadExcel_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.btnLoad.Focus()
Me.dgvExcel.Visible = False
Me.pbNick.Visible = True
Me.pbLogo.Visible = False
End Sub
''' <summary>
''' Evento Click del botón "Cargar Archivo"
''' </summary>
''' <remarks>Se encarga de abrir un cuadro de dialogo para buscar el archivo xls que deseamos visualizar</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
Me.dgvExcel.Visible = False
Me.pbNick.Visible = True
Me.pbLogo.Visible = False
End Sub
''' <summary>
''' Evento Click del botón "Visualizar Excel"
''' </summary>
''' <remarks>Se presenta un inputbox solicitando que número 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
''' <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 información</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 inválida")
Exit Sub
End If
Dim DA As New OleDbDataAdapter("Select * From [" & sSheet & "$]", cs) 'sSheet es el nombre de la hoja
Dim DS As New DataSet
Try
DA.Fill(DS) 'Se intenta llenar con "Sheet(sheetNo)$"
Catch ex As Exception
Try
Dim DA1 As New OleDbDataAdapter("Select * From [" & "Hoja" & sheetNo & "$]", cs)
DA1.Fill(DS) 'Se intenta llenar con "Hoja(sheetNo)$"
Catch e As Exception
MessageBox.Show("No se detectaron en el libro de Excel hojas con el nombre 'Sheet" + sheetNo + "' ni 'Hoja" + sheetNo + "'," & _
"usualmente esto se debe a que cambió el nombre de la hoja que quiere visualizar o bien a que no exista. " & "Verifique el nombre " & _
"en su documento y escribalo a continuación para intentar visualizarlo nuevamente", "Error al visualizar el documento", MessageBoxButtons.OK, MessageBoxIcon.Information)
sheetName = InputBox("Introduzca el NOMBRE de la hoja que quiere visualizar en el grid.")
If sheetName = "" Then
Me.dgvExcel.Visible = False
Me.pbNick.Visible = True
Me.pbLogo.Visible = False
Exit Sub
End If
Dim DA2 As New OleDbDataAdapter("Select * From [" & sheetName & "$]", cs)
DA2.Fill(DS)
End Try
Me.dgvExcel.Visible = False
Me.pbNick.Visible = True
Me.pbLogo.Visible = False
End Try
'Cuando se ha encontrado al hoja a desplegar se pasa la información al DGV
dgvExcel.DataSource = DS.Tables(0)
' DefaultCellStyle: formato currency ($) para los encabezados
'.Columns(1).DefaultCellStyle.Format = "c"
'.Columns(2).DefaultCellStyle.Format = "c"
Me.dgvExcel.Visible = True
Me.pbNick.Visible = False
Me.pbLogo.Visible = True
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)
Me.dgvExcel.Visible = False
Me.pbNick.Visible = True
Me.pbLogo.Visible = False
End Try
End Sub
''' <summary>
''' Evento Click del Botón "Salir"
''' </summary>
''' <remarks>Se encarga de mandar llamar al evento FormClosing de la forma</remarks>
Private Sub BtnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
Me.Close()
End Sub