none
Leer multiples hojas en Excel desde Visual Studio 2015

    Pregunta

  • Buenos días y gracias de antemano por la dedicación a la pregunta que voy a hacerles. Me encuentro en un lindo lío y me gustaría saber cómo hacer para leer varias hojas de un archivo de Excel desde Visual Studio 2015 programando en Visual Basic. Todas las hojas poseen el mismo formato y una de las celdas contiene una fecha. Esa fecha debo leerla para después seguir procediendo en el programa. Ese archivo de Excel lo que contiene básicamente es una base de datos de turnos otorgados en un consultorio médico. Mi problema no es leer una hoja en particular del libro, sino leer todos ellas.
    jueves, 20 de abril de 2017 13:50

Respuestas

  • Si estás leyendo el Excel usando OpenXML, entonces el truco está en buscar los descendientes del objeto workbook que sean de tipo Sheet, y luego puedes iterar sobre ellos como quieras, por ejemplo con un bucle For Each.

    El ejemplo está hecho en C#, pero el mismo principio de funcionamiento es válido igualmente para VB.NET usando los mismos objetos y cambiando la sintaxis del lenguaje:

                    var filePath = "MiFichero.xlsx";
                    using (var document = SpreadsheetDocument.Open(filePath, false))
                    {
                        var workbookPart = document.WorkbookPart;
                        var workbook = workbookPart.Workbook;
    
                        var sheets = workbook.Descendants<Sheet>();
                        foreach (var sheet in sheets)
                        {
                           ...
                        

    jueves, 20 de abril de 2017 20:44
  • Hola:
    El siguiente ejemplo usa la libreria Spire.Xls.dll y tendras que añadir una referencia a dicha libreria.
    He creado un libro de excel (D:\Libro1.xlsx) y en las celdas B2 de todas las hojas he introducido una fecha
    En Un Form con 1 button, copia y pega el siguiente código

    Option Explicit On
    Option Strict On
    Imports Spire.Xls
    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim workbook As Workbook = New Workbook()
            workbook.LoadFromFile("D:\Libro1.xlsx")
            Dim Hojas As Integer = workbook.Worksheets.Count
            Dim sheet As Worksheet
            For Item As Integer = 0 To Hojas - 1
                sheet = workbook.Worksheets(Item)
                MessageBox.Show("Hoja: " & Item.ToString & " - " & CStr(sheet.Range("B2").Value))
            Next
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos


    jueves, 20 de abril de 2017 20:58

Todas las respuestas

  • Si estás leyendo el Excel usando OpenXML, entonces el truco está en buscar los descendientes del objeto workbook que sean de tipo Sheet, y luego puedes iterar sobre ellos como quieras, por ejemplo con un bucle For Each.

    El ejemplo está hecho en C#, pero el mismo principio de funcionamiento es válido igualmente para VB.NET usando los mismos objetos y cambiando la sintaxis del lenguaje:

                    var filePath = "MiFichero.xlsx";
                    using (var document = SpreadsheetDocument.Open(filePath, false))
                    {
                        var workbookPart = document.WorkbookPart;
                        var workbook = workbookPart.Workbook;
    
                        var sheets = workbook.Descendants<Sheet>();
                        foreach (var sheet in sheets)
                        {
                           ...
                        

    jueves, 20 de abril de 2017 20:44
  • Hola:
    El siguiente ejemplo usa la libreria Spire.Xls.dll y tendras que añadir una referencia a dicha libreria.
    He creado un libro de excel (D:\Libro1.xlsx) y en las celdas B2 de todas las hojas he introducido una fecha
    En Un Form con 1 button, copia y pega el siguiente código

    Option Explicit On
    Option Strict On
    Imports Spire.Xls
    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim workbook As Workbook = New Workbook()
            workbook.LoadFromFile("D:\Libro1.xlsx")
            Dim Hojas As Integer = workbook.Worksheets.Count
            Dim sheet As Worksheet
            For Item As Integer = 0 To Hojas - 1
                sheet = workbook.Worksheets(Item)
                MessageBox.Show("Hoja: " & Item.ToString & " - " & CStr(sheet.Range("B2").Value))
            Next
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos


    jueves, 20 de abril de 2017 20:58
  • Hola buenas noches, coloca un DataGridView1 y un boton

     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim stRuta As String = "aqui debes colocar la ruta de donde esta tu archivo de Excel"

    Try
                Dim stConexion As String = ("Provider=Microsoft.ACE.OLEDB.12.0;" & ("Data Source=" & (stRuta & ";Extended Properties=""Excel 12.0;Xml;HDR=YES;IMEX=2"";")))
                Dim cnConex As New OleDbConnection(stConexion)
                Dim Cmd As New OleDbCommand("Select * From [Hoja1$]")
                Dim Ds As New DataSet
                Dim Da As New OleDbDataAdapter
                Dim Dt As New DataTable
                cnConex.Open()
                Cmd.Connection = cnConex
                Da.SelectCommand = Cmd
                Da.Fill(Ds)
                Dt = Ds.Tables(0)
                Me.DataGridView1.Columns.Clear()
                Me.DataGridView1.DataSource = Dt
                Button1.Enabled = True
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
            End Try

     End Sub

    sábado, 22 de abril de 2017 2:28