Access创建宏批量导入CSV如何避免重复并合并周度销售数据
问题修复方案
针对你提到的重复导入、多表分散两个问题,按以下步骤调整即可:
前置配置
先完成一次性的表结构准备,从底层避免问题:
- 新建统一汇总表,命名为
All_Weekly_Sales,字段和你CSV内的销售数据字段一一对应,额外新增长度255的文本型字段Source_File_Name,用于存储每条数据对应的来源CSV文件名。 - 给
All_Weekly_Sales设置复合主键:选中能唯一确定单条销售记录的字段组合(比如订单号,或者交易日期+门店编码+交易金额的组合),搭配Source_File_Name字段一起设为主键,从表规则层面阻止重复数据写入。
修正后VBA代码
修复点说明:
- 取消原逻辑中按CSV文件名创建独立表的逻辑,所有CSV先导入临时表,校验后统一追加到汇总表,解决多表分散问题
- 导入前先校验当前CSV文件名是否已经存在于汇总表中,已导入的文件直接跳过,从文件维度避免重复导入
- 增加临时表自动清理逻辑,避免数据库内残留冗余对象
Public Function import_data_files() Dim report_path As String, file_name As String Dim temp_table_name As String ' 配置CSV存放路径 report_path = "C:\Users\omar-\OneDrive\Desktop\Work\WeeklySalesData-Raw\" ' 定义导入用的临时表名,每次导入复用 temp_table_name = "temp_csv_import" file_name = Dir(report_path & "*.csv") Do While file_name <> vbNullString ' 校验当前文件是否已导入,已导入则直接跳过 Dim file_imported_count As Long file_imported_count = DCount("*", "All_Weekly_Sales", "Source_File_Name = '" & Replace(file_name, "'", "''") & "'") If file_imported_count > 0 Then file_name = Dir GoTo NextLoop End If ' 清理历史残留的临时表 On Error Resume Next DoCmd.DeleteObject acTable, temp_table_name On Error GoTo 0 ' 将当前CSV导入临时表 DoCmd.TransferText acImportDelim, , temp_table_name, report_path & file_name, True ' 给临时表增加来源文件名字段,写入当前文件名 CurrentDb.Execute "ALTER TABLE " & temp_table_name & " ADD COLUMN Source_File_Name TEXT(255)" CurrentDb.Execute "UPDATE " & temp_table_name & " SET Source_File_Name = '" & Replace(file_name, "'", "''") & "'" ' 将临时表数据追加到汇总表,主键冲突的重复记录会被自动拦截 CurrentDb.Execute "INSERT INTO All_Weekly_Sales SELECT * FROM " & temp_table_name, dbFailOnError ' 导入完成后删除临时表 DoCmd.DeleteObject acTable, temp_table_name NextLoop: file_name = Dir Loop MsgBox "导入完成:已自动跳过历史已导入文件,所有数据已汇总至All_Weekly_Sales表", vbInformation End Function
使用注意事项
- 首次运行代码前,先打开VBA编辑器,点击菜单栏「工具-引用」,勾选
Microsoft DAO 3.6 Object Library(或版本号更高的DAO库),避免数据库操作报错。 - 后续导出数据到Excel时,直接导出
All_Weekly_Sales表或基于该表创建的查询即可,只会生成单个工作表,包含全量周度销售数据。 - 如果需要重新导入某个已上传过的CSV,先在
All_Weekly_Sales表中删除Source_File_Name对应该文件名的所有记录,再运行宏即可。
内容的提问来源于stack exchange,提问作者omar abbas
相关产品推荐
相关产品推荐

