工作中我们经常碰到大量格式相同的数据分散在多个文件中,分析过程中首先需要将这些数据合并到一个文件中,然后进行统一分析,本文介绍一种方法可批量合并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

效果展示

合并后效果

代码运行示例:

视频加载中...