通过VBA将大数据集导入到Excel中

我有一个巨大的数据集,我需要从Excel导入到Access(〜800k行)。 但是,我可以忽略具有特定列值的行,这些值与实际数据集的90%相似。 所以实际上我只需要input10%的线。

在过去,我一直在以如下方式(伪代码)逐行导入Excel文件:

For i = 1 To EOF sql = "Insert Into [Table] (Column1, Column2) VALUES ('" & _ xlSheet.Cells(i, 1).Value & " ', '" & _ xlSheet.Cells(i, 2).Value & "');" Next i DoCmd.RunSQL sql 

用〜800k行,这需要waaay长,每一行查询将被创build和运行。

考虑到我也可以忽略90%的线的事实,从Excel导入数据集到Access的最快方法是什么?

我正在考虑创build一个激活filter的临时excel文件。 然后我只是导入过滤的Excel。

但是有没有比这更好/更快的方法? 另外,什么是通过vba访问导入excel的最快方法?

提前致谢。

考虑为导入运行特殊的Access查询。 将下面的SQL添加到Access查询窗口中或作为DAO / ADO连接中的SQL查询。 包括任何需要命名列标题的WHERE子句,现在设置为HDR:No

 INSERT INTO [Table] (Column1, Column2) SELECT * FROM [Excel 12.0 Xml;HDR=No;Database=C:\Path\To\Workbook.xlsx].[SHEET1$]; 

或者,如果您需要暂存临时表(要删除90%的行),请在最终表之前运行一个生成表查询,但是请注意,如果存在该查询,则replace表:

 SELECT * INTO [NewTable] FROM [Excel 12.0 Xml;HDR=No;Database=C:\Path\To\Workbook.xlsx].[SHEET1$]; 

你的代码稍微改变就可以为你做过滤了:

 Dim strTest As String For i = 1 To EOF strTest=xlSheet.Cells(i, 1).Value if Nz(strTest)<>"" Then sql = "Insert Into [Table] (Column1, Column2) VALUES ('" & _ strTest & " ', '" & _ xlSheet.Cells(i, 2).Value & "');" DoCmd.RunSQL sql End If Next i 

我假设在循环之外的RunSQL只是你的伪代码中的一个错误。 这将testing第一列中的单元格为空,但您可以用任何适合您的情况的条件进行replace。