【发布时间】:2019-05-30 11:08:14
【问题描述】:
我有一个包含一百万行和 25 列的 Excel 文件。
当我将 Excel 数据传输到 datatable 时,只有 8000 到 9000 行被传输到 datatable。但该文件有一百万行。
我尝试了以下代码:
<connectionStrings>
<!--Connect excel for bulk upload-->
<add name="Excel03ConString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'"/>
<add name="Excel07+ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'"/>
</connectionStrings>
connString = String.Format(connString, excelPath)
Using excel_con As New OleDbConnection(connString)
excel_con.Open()
Dim sheet1 As String = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing).Rows(0)("TABLE_NAME").ToString()
Dim dtExcelData As New DataTable()
dtExcelData.Columns.AddRange(New DataColumn(3) {New DataColumn("Document Type", GetType(String)), _
New DataColumn("Posting period", GetType(Decimal)), _
New DataColumn("Profit Center", GetType(String)) })
Using oda As New OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con)
oda.Fill(dtExcelData)
End Using
excel_con.Close()
End Using
我该如何解决这个问题?
【问题讨论】:
-
我注意到您似乎只想要源数据中的三列 - 如果您按名称选择它们而不是使用
*的所有列,它会更好吗? -
@AndrewMorton 不,它没有改善。但是如果我将 .xlsx 转换为 .xls 格式,那么整个 65536 xls 限制将被复制到
datatable,对于 xlsx 只有 8456。此外,如果我直接从 VisualStudio 运行构建,则整百万条记录都将复制到datatable。但发布仅复制 8456。我是否必须在 IIS 中进行任何更改? -
如何将连接字符串中的扩展属性部分更改为
Extended Properties=""Excel 12.0 Xml;HDR=YES""? (来自connectionstrings.com。) -
如果还是不行,你可以试试How to import large excel file to datatable?中提到的ACE的第三方替代品
-
@AndrewMorton
Properties=""Excel 12.0 Xml;HDR=YES""没有改变结果
标签: excel vb.net datatable oledb