将数据导入 Access 时如何跳过 Excel 中的前几行?
Posted
技术标签:
【中文标题】将数据导入 Access 时如何跳过 Excel 中的前几行?【英文标题】:How to skip first few rows in Excel when importing data into Access? 【发布时间】:2019-06-23 14:42:35 【问题描述】:我是 Access 2016 VBA 的新手,我一直在将 Excel 数据导入 Access 表。
但问题是我需要跳过 Excel 表的前三行,以便我可以直接将 Excel 数据保存到 Access 表中。我怎样才能做到这一点?
这是我用来将 Excel 数据导入表格的代码:
DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True
还有一件事是无法指定 Excel 单元格的范围,因为它会有所不同。
【问题讨论】:
发布更多代码/ 【参考方案1】:MS Access 对无序数据集进行操作,因此,您不能依赖查询返回的记录顺序,或从电子表格或文本文件等外部源将数据导入表中的顺序.
只有在包含order by
子句的情况下严格定义排序时,才能依赖查询返回的记录顺序。
因此,如果您希望继续为您的任务使用TransferSpreadsheet
方法,您将需要确定一种识别要省略的记录的方法,该方法与导入记录的顺序无关。这样,您可以将所有记录导入表中,然后运行 delete
查询,将记录识别逻辑作为其选择标准。
我可以看到实现此目的的唯一其他方法是使用 ActiveX 与 MS Access 中的 Excel 工作表交互,遍历工作表中的行,并填充记录集,同时省略遇到的前三行。
【讨论】:
【参考方案2】:对于此类解决方法,我使用了删除 Excel 文件中的前三行。您可以在 Excel 中录制宏,然后在 Access 中导入文件之前调用预处理。
其他选项是使用命名范围,您可以将它们直接导入 Access。
最适合您的解决方案是使用 DoCmd.Transferspreadsheet
范围规范,如此处所述 - https://docs.microsoft.com/ru-ru/office/vba/api/access.docmd.transferspreadsheet
DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4:G12"
在这种情况下,您将导入指定的范围,例如从第 4 行到第 12 行。
一些缺点是:
您应该知道要导入的记录数,或者也导入空白,并进一步删除它们 它不会导入更多的 65536 行,如此处所述 - Problem with MS Access Data Import 65000 lines limit despite using non-Excel 2003 functions and files【讨论】:
【参考方案3】:如果您总是希望跳过前三行,您只需将起始位置更改为DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4"
,然后使用下面的代码获取所有输入,直到您点击一个空单元格。
DoCmd.TransferSpreadsheet acImport, , Tbl, SelectedFls, True, "A4"
'first line checks if this cell is empty or not
Do While xlc.Value <> ""
'takes the value of the current cell
WO_Num(lngColumn) = xlc.Offset(0, 0).Value
'shifts the selected cells one row downwards
Set xlc = xlc.Offset(1, 0)
lngColumn= lngColumn + 1
Loop
【讨论】:
以上是关于将数据导入 Access 时如何跳过 Excel 中的前几行?的主要内容,如果未能解决你的问题,请参考以下文章
将 Access 表导入 Excel 表,而不将第一条记录作为 Access 字段标签