如何批量导入不同规格CSV文件至Access对应独立表?
Access多CSV文件按指定规格批量导入对应表解决方案
核心思路
通过建立文件-表-导入规格的映射规则,让程序自动遍历指定目录,匹配对应文件后按照预设规格导入到目标表,无需手动逐个选择文件。
实现步骤
1. 定义映射规则
你可以选择两种方式定义规则:
- 方式一:硬编码数组(适合规则固定的场景)
在代码里直接写死每个表对应的导入规格和文件名匹配规则,比如:' 格式:目标表名, 导入规格名, 文件名匹配模式 Dim importRules As Variant importRules = Array( _ Array("TABLEONEHeader", "TABLEONE", "*TABLEONE*.csv"), _ Array("TABLETWOHeader", "TABLETWO", "*TABLETWO*.csv") _ ) - 方式二:Access表存储规则(适合规则需要灵活修改的场景)
在Access中新建表ImportRules,字段如下:字段名 类型 说明 TargetTable 文本 要导入的目标表名 ImportSpec 文本 预先保存的导入规格名称 FileNamePattern 文本 匹配CSV文件的通配符规则
2. 自动导入VBA代码
以下是完整的自动遍历导入代码(以硬编码数组为例,若用表存储规则,只需替换规则读取部分):
Private Sub Command1_Click() Dim strPath As String Dim strFile As String Dim importRules As Variant Dim i As Integer Dim blnFileFound As Boolean ' 选择要遍历的目录 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "选择CSV文件所在目录" If .Show = -1 Then strPath = .SelectedItems(1) & "\" Else MsgBox "未选择目录,操作终止", vbCritical Exit Sub End If End With ' 定义导入规则:目标表名, 导入规格名, 文件名匹配模式 importRules = Array( _ Array("TABLEONEHeader", "TABLEONE", "*TABLEONE*.csv"), _ Array("TABLETWOHeader", "TABLETWO", "*TABLETWO*.csv") _ ) DoCmd.SetWarnings False ' 遍历每条规则,匹配文件并导入 For i = LBound(importRules) To UBound(importRules) blnFileFound = False strFile = Dir(strPath & importRules(i)(2)) ' 查找匹配的文件 Do While strFile <> "" blnFileFound = True ' 清空目标表数据 DoCmd.RunSQL "DELETE * FROM " & importRules(i)(0) ' 按指定规格导入 DoCmd.TransferText acImportDelim, importRules(i)(1), importRules(i)(0), strPath & strFile, True MsgBox importRules(i)(0) & " 导入完成" strFile = Dir() Loop ' 未找到匹配文件时提示 If Not blnFileFound Then MsgBox "未找到匹配 " & importRules(i)(2) & " 的文件", vbExclamation End If Next i DoCmd.SetWarnings True MsgBox "所有导入任务执行完毕" End Sub
3. 关键注意事项
- 确保所有导入规格已在Access中保存(手动导入时保存的规格可直接复用)
- 文件名匹配模式要准确:用
*作为通配符,比如*TABLEONE*.csv会匹配所有包含TABLEONE的CSV文件,若为固定文件名则直接写TABLEONE.csv - 代码中加入了文件存在检查,避免因文件缺失导致报错
- 最后记得恢复
SetWarnings True,防止后续SQL操作无提示
内容的提问来源于stack exchange,提问作者MHM
相关产品推荐
相关产品推荐

