Ler Várias Planilhas do Excel em uma Listview

0

Pergunta

Eu estou tentando ler um arquivo do excel que tem várias folhas 1,2,3,4,5,6,7,8,9,10

Eu preciso ler várias colunas de o que está em lençóis, por exemplo, do intervalo a1: a20 e c1: c20

O resultado é a listagem, em um listview, eu estou tentando com várias sugestões que aparecem no fórum, mas ele só me permite ler uma folha e eu preciso ler vários ao mesmo tempo. De qualquer maneira, eu coloquei o código que estou usando.

Obrigado antecipadamente

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

Melhor resposta

0

Eu acredito que isso seria uma questão de fazer loop através de planilhas e carregamento de um DataTable para cada folha que é, em seguida, adicionado a um conjunto de dados. Meu código pressupõe que o mesmo intervalo é usado para cada folha. Eu fiz o intervalo contíguo porque isso exigiria um comando separado para cada intervalo não contíguas. Eu acredito que seria mais fácil ignorar as irrelevantes dados no 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

Em outros idiomas

Esta página está em outros idiomas

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