Access 2013 - 读取 Excel 数据的最快方式

Access 2013 - Quickest way to read in Excel data

我的部分访问代码是从现有 excel 文件中读取数据。我已经能够弄清楚如何去做,但需要很长时间才能处理。 excel 文件有大约 400 行,我只是从两列中抓取数据并将其放入一个多维数组中。

Dim excelapp As Excel.Application
Dim strBxNum As String: strBxNum = "bx" & strInd
Dim i As Integer
Dim r As Integer
Set excelapp = CreateObject("Excel.Application")
Dim WkBk As Excel.Workbook
Set WkBk = excelapp.Workbooks.Open(fileName:=strFileName)

i = 6
r = 0

Do While WkBk.Sheets(3).Range("C" & i) <> ""
  strWriteUp(r, 0) = WkBk.Sheets(3).Range("C" & i)
  strWriteUp(r, 1) = WkBk.Sheets(3).Range("P" & i)

  i = i + 1
  r = r + 1
Loop

有没有更有效的方法?

逐个单元格的操作往往比使用数组一次读取范围慢得多(尤其是跨应用程序边界)。

例如

Dim excelapp As Excel.Application
Dim strBxNum As String: strBxNum = "bx" & strInd
Dim i As Long, lr As Long
Dim WkBk As Excel.Workbook, arrC, arrP

Set excelapp = CreateObject("Excel.Application")
Set WkBk = excelapp.Workbooks.Open(fileName:=strFileName)

i = 6

With WkBk.Sheets(3)
    lr = .Cells(.Rows.Count, "C").End(xlUp).Row
    arrC = .Range(.cells(i, "C"), .Cells(lr, "C") ).Value
    arrP = .Range(.cells(i, "P"), .Cells(lr, "P") ).Value
End With

这将为您提供两个基于 1 的二维数组(1 到 #rows,1 到 1),您可以按原样使用它们,也可以循环并组合成一个二维数组。

编辑 将 arrP 放入 arrC:

Dim n As Long, nR as Long

nR = ubound(arrC, 1)
ReDim Preserve arrC(1 to nR, 1 to 2)
For n = 1 to nR
    arrC(n, 2) = arrP(n, 1)
next n