先发一下第一版速度超级慢的代码:
Dim dt As New DataTable
Dim ExcelApp As New Excel.Application
Dim WorkBook As Excel.Workbook
Dim WorkSheet As Excel.Worksheet
Dim dt As New DataTable
dt.Columns.Add("编号")
dt.Columns.Add("地址码")
dt.Columns.Add("姓名")
For i As Integer = 1 To 10000
dt.Rows.Add({i, WorkSheet.Cells(i + 1, 3).value, WorkSheet.Cells(i + 1, 4).value})
Next
这样写的话,加载1w行的数据差不多要用半分多钟的时间,还就三列而已,这速度简直不能忍受啊~网上翻了一下资料,有大神给出了解释:
Excel.Range的Value属性是Object的二维数组。
于是我想,不去遍历每个单元格,而是一次取得所要操作区域(Range)的Value属性,对这个二维数组操作,最后再把这个二维数组赋回去,就大功能告成了。
把后面循环的代码段改成下面的写法,秒加载完成啊!
Dim ary As Object(,) = WorkSheet.Range("A1:E10001").Value
For i As Integer = 1 To 10000
dt.Rows.Add({i, ary(i + 1, 3), ary(i + 1, 4)})
Next