【发布时间】:2021-06-07 11:06:17
【问题描述】:
我正在尝试使用 VB 将数据表导入 Excel。我找到了很多方法来做到这一点,但它们都给我带来了问题。
我尝试的第一种方法是使用 ClosedXML。它非常适合导入数据,但它弄乱了数据透视表。这是一个已知的问题。此外,如果数据表太大,它会抛出内存不足异常,这是另一个已知问题。
然后我切换到互操作。但是使用 Interop 我只找到了一种导入数据的方法,那就是双循环,如下所示。对我来说,这里的问题是,导入一个 3k 行、39 列的表需要 15 分钟以上的时间。无论如何,这种方法对我来说似乎很慢且效率低下,我无法想象微软没有实施更有效的方法来导入更大的数据表。
有没有人可以教我一个更好的方法?
For i As Integer = 0 To datatable.Rows.Count() - 1
For j As Integer = 0 To datatable.Columns.Count() - 1
xlWorkSheet.Cells(i + 2, j + 1) = datatable.Rows(i)(j).ToString()
Next
Next
Fadi 的回复和快速的谷歌搜索为我解决了这个问题。
'dt is your Datatable and xlWorksheet is Your Worksheet
Dim cc = dt.Columns.Count
Dim rc = dt.Rows.Count
Dim arr(rc - 1, cc - 1) As Object
For r = 0 To rc - 1
Dim dr = dt.Rows(r)
For c = 0 To cc - 1
arr(r, c) = dr(c).ToString 'I added ToString() here, because it raised an type error
Next
Next
xlWorkSheet.Range("A2").Resize(rc, cc).Value = arr
【问题讨论】:
-
您可以创建 2D 数组并从数据表中填充它,然后将此数组分配给 Excel 范围,如 Assign Values of 2D Array to Range of Cells 在我的测试中,3k 行和 39 列需要 670 毫秒
标签: excel vb.net excel-interop closedxml