Leer Varias Hojas de Excel en un Listview

0

Pregunta

Estoy tratando de leer un archivo de excel con varias hojas de 1,2,3,4,5,6,7,8,9,10

Tengo que leer varias columnas de lo que es en las hojas, por ejemplo, en el rango a1: a20 y c1: c20

El resultado es una lista en un listview, estoy intentando con varias sugerencias que aparecen en el foro, pero sólo me permite leer una hoja y tengo que leer varias al mismo tiempo. De todos modos he puesto el código que estoy utilizando.

Gracias de antemano

Public Class Frm_ImportarLibro
    Public Function Obtenerdatos(ByVal ruta As String, ByVal hoja As String, ByVal rango As String) As DataTable


        Dim cadenaConexion As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=NO';" &
                                       "Data Source=" & ruta


        Using cnn As New OleDbConnection(cadenaConexion)


            Dim cmd As OleDbCommand = cnn.CreateCommand()
            cmd.CommandText = String.Format("SELECT * FROM [{0}${1}]", hoja, rango)
            Dim da As New OleDbDataAdapter(cmd)
            Dim dtTemp As New DataTable("Prueba")
            da.Fill(dtTemp)
            Dim dt As DataTable = dtTemp.Clone()
            Dim rows As DataRow() = dtTemp.Select()

            For index As Integer = 0 To rows.Count - 1
                Dim row As DataRow = rows(index)
                If (row.Item(0) Is DBNull.Value) Then
                    Exit For
                End If

                dt.ImportRow(row)
            Next

            Return dt

        End Using

    End Function
1

Mejor respuesta

0

Creo que esta sería una cuestión de bucle a través de las hojas y la carga de una tabla de datos de cada hoja, que se añade a continuación un conjunto de datos. Mi código se supone que el mismo se utiliza para cada hoja. Hice el rango contiguo, ya que requeriría un comando independiente para cada rango no contiguo. Creo que sería más fácil ignorar los datos extraños en el objeto DataTable resultante.

Private cadenaConexion As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=NO';Data Source="
Private rango As String = "A1:C20"

Private Function GetXLSheetNames(path As String) As List(Of String)
    Dim SheetNames As New List(Of String)
    Dim dt As DataTable
    Using cn As New OleDbConnection(cadenaConexion & path)
        cn.Open()
        dt = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
    End Using
    For Each row As DataRow In dt.Rows
        Dim s = row("Table_Name").ToString
        SheetNames.Add(s)
    Next
    Return SheetNames
End Function

Public Function Obtenerdatos(ByVal ruta As String, ByVal hoja As String, ByVal rango As String) As DataSet
    Dim ds As New DataSet
    Dim lst = GetXLSheetNames(ruta)
    Using cnn As New OleDbConnection(cadenaConexion & ruta),
            cmd As New OleDbCommand()
        cmd.Connection = cnn
        cnn.Open()
        For Each s In lst
            Dim dt As New DataTable(s)
            cmd.CommandText = $"SELECT * FROM [{s}{rango}]"
            Using reader = cmd.ExecuteReader
                dt.Load(reader)
            End Using
            ds.Tables.Add(dt)
        Next
    End Using
    Return ds
End Function
2021-11-24 07:33:37

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................