将 Excel .xlsx 文件导入 vb.net

Import Excel .xlsx file into vb.net

我想将我的 Excel .xlsx 文件导入 vb.net 中的数据 table,以便稍后处理数据。我的 Excel 文件名为 Data.xlsx 如下所示:

Référence Date Concerned Numbers Comment
2022-A34 24.01.2022 738/3784 Checked
2022-A36 28.01.2022 7/3, 8733/28373,938/24755

并尝试在此处使用 Ciarán 提供的代码:Best /Fastest way to read an Excel Sheet into a DataTable?

    Dim sSheetName As String = ""
    Dim sConnection As String
    Dim nOutputRow As Integer = 0
    Dim dtTablesList As DataTable
    Dim oleExcelCommand As OleDb.OleDbCommand
    Dim oleExcelReader As OleDb.OleDbDataReader
    Dim oleExcelConnection As OleDb.OleDbConnection

    sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Folder\Data.xlsx;Extended Properties=""Excel 12.0;HDR=No;IMEX=1"""

    oleExcelConnection = New OleDb.OleDbConnection(sConnection)
    oleExcelConnection.Open()

    dtTablesList = oleExcelConnection.GetSchema("Tables")

    If dtTablesList.Rows.Count > 0 Then
        sSheetName = dtTablesList.Rows(0)("TABLE_NAME").ToString
    End If

    dtTablesList.Clear()
    dtTablesList.Dispose()

    If sSheetName <> "" Then
        oleExcelCommand = oleExcelConnection.CreateCommand()
        oleExcelCommand.CommandText = "Select * From [" & sSheetName & "]"
        oleExcelCommand.CommandType = CommandType.Text
        oleExcelReader = oleExcelCommand.ExecuteReader
        nOutputRow = 0
        While oleExcelReader.Read
        End While
        oleExcelReader.Close()
    End If

    oleExcelConnection.Close()

我现在的问题是,当我 运行 该代码并检查 dtTablesList 以查看内容时,整个 table 基本上是空的。 我只看到这个:

我是不是遗漏了什么或者我的方法完全错误?

这个

While oleExcelReader.Read
End While

将让您处理循环内的每一行。 如果您想单独读取和处理每一行的每个字段,这很好,例如与 oleExcelReader.GetString(0)

如果您只想阅读整个 table,一种方法是:

...
dtTablesList.Clear()
dtTablesList.Dispose()

Dim dt As DataTable

If sSheetName <> "" Then
    oleExcelCommand = oleExcelConnection.CreateCommand()
    oleExcelCommand.CommandText = "Select * From [" & sSheetName & "]"
    oleExcelCommand.CommandType = CommandType.Text
    Using da As New OleDb.OleDbDataAdapter(oleExcelCommand)
        dt = New DataTable
        da.Fill(dt)
    End Using
End If

oleExcelConnection.Close()