将 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()
我想将我的 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()