Liste Görünümünde Birden Çok Excel Sayfasını Okuma

0

Soru

Birden çok sayfa 1,2,3,4,5,6,7,8,9,10 olan bir excel dosyasını okumaya çalışıyorum

Örneğin a1: a20 ve c1: c20 aralığından bu sayfalarda bulunanların birkaç sütununu okumam gerekiyor

Sonuç, bir liste görünümünde listeleniyor, forumda görünen birkaç öneriyle çalışıyorum, ancak yalnızca bir sayfayı okumama izin veriyor ve aynı anda birkaç tane okumam gerekiyor. Her neyse, kullandığım kodu koydum.

Şimdiden teşekkür ederiz

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

En iyi cevabı

0

Bunun, sayfalar arasında döngü yapmak ve daha sonra bir veri kümesine eklenen her sayfa için bir DataTable yüklemek meselesi olacağına inanıyorum. Kodum, her sayfa için aynı aralığın kullanıldığını varsayar. Aralığı bitişik yaptım çünkü bitişik olmayan her aralık için ayrı bir komut gerektirecekti. Ortaya çıkan Datatable'daki yabancı verileri görmezden gelmenin daha kolay olacağına inanıyorum.

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

Diğer dillerde

Bu sayfa diğer dillerde

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