我需要将大量记录从excel上传到msaccess。目前,我的工作是在VBA中创建一个“ INSERT INTO” SQL查询,并使用实际值遍历我的数据表。像这样的东西
for i=1 to NumberOfRecords
Sql=Insert Into Table, cell Field, Values(cell(i,1)
next
当我遇到性能问题时,我想知道是否存在使用sql的更有效方法。谢谢
考虑Jet / ACE SQL引擎支持的直接Excel查询。下面假设Excel工作表的格式为表格,带有已命名的标题,并且以A1
单元格开头。保存或在下面作为Access查询运行。当然,请调整所有列,Excel工作簿路径和工作表名称。
INSERT INTO myTable (Col1, Col2, Col3, ...)
SELECT t.Col1, Col2, Col3, ...
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet1$] t
对于不是从最上方的A1
单元格开始且没有标题的Excel数据,请考虑以下查询,该查询从工作表范围中选择数据:B100:Z450
。确保列出的表列与无名标题的Excel数据中的数据类型一对一匹配。
INSERT INTO myTable (Col1, Col2, Col3, ...)
SELECT *
FROM [Excel 12.0 Xml;HDR=No;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet1$B100:Z450] t
要调试,请始终在完全追加查询之前运行查询的SELECT
部分。
我用来解决此问题的方法是在Excel中使用数组,以所需格式将它们写出到磁盘,然后对该文件使用Access的TransferText方法。
考虑Jet / ACE SQL引擎支持的直接Excel查询。下面假设Excel工作表的格式为表格,带有已命名的标题,并且以A1
单元格开头。保存或在下面作为Access查询运行。当然,请调整所有列,Excel工作簿路径和工作表名称。
INSERT INTO myTable (Col1, Col2, Col3, ...)
SELECT t.Col1, Col2, Col3, ...
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet1$] t
对于不是从最上方的A1
单元格开始且没有标题的Excel数据,请考虑以下查询,该查询从工作表范围中选择数据:B100:Z450
。确保列出的表列与无名标题的Excel数据中的数据类型一对一匹配。
INSERT INTO myTable (Col1, Col2, Col3, ...)
SELECT *
FROM [Excel 12.0 Xml;HDR=No;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet1$B100:Z450] t
要调试,请始终在完全追加查询之前运行查询的SELECT
部分。