工作中我们经常碰到大量格式相同的数据分散在多个文件中,分析过程中首先需要将这些数据合并到一个文件中,然后进行统一分析,本文介绍一种方法可批量合并Excel或者csv文件。
场景模拟:
每个csv文件中记录一个城市近10年的空气质量数据,现在需要将这些数据汇总到一个文件中。
共368个csv文件
共368个csv文件
实现原理:
创建access数据库文件,新建一张表,设置好字段类型,然后遍历air_quality文件夹下的csv文件,使用insert into语句将每个csv文件的数据插入到Access的表中。
代码示例:
Option Explicit
'AdoConnect为自定义工具类,封装Ado,执行sql语句
Dim conn As New AdoConnect
Sub main()
Dim dataPath As String
Dim dbq As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
dataPath = "D:weatherinputair_quality"
dbq ="data.accdb"
'创建Access数据库
conn.createDB dbq
'合并原始数据
Call mergeData(dataPath, dbq)
'关闭数据库连接
conn.ConnClose
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Function mergeData(dataPath, dbq As String)
Dim sql As String, tableName As String
Dim myFile As String
Dim arr
tableName = "city"
conn.datasource = dbq
sql = "CREATE TABLE " & tableName & "([日期] Datetime,[质量等级] Char,[AQI指数] Float,[当天AQI排名] Float," _
& "[PM2#5] Float,[PM10] Float,[So2] Float,[No2] Float,[Co] Float,[O3] Float,[city] Char,[province] Char)"
conn.execute sql
myFile = Dir(dataPath + "*.csv")
Do While myFile <> ""
'CharacterSet=65001解决中文乱码问题
sql = "insert into [" & tableName & "] select * from [text;fmt=csv;hdr=yes;CharacterSet=65001;delimited;database=" & dataPath & "].[" & myFile & "]"
conn.execute sql
myFile = Dir
Loop
End Function
效果展示
合并后效果