合并Excel或csv的几种方法:批处理/插件/Power Query/VBA/Python
工作场景经常有合并Excel或者csv文件的需求,这里汇总常用的几种方法:
批处理
- 适用性:txt或csv 纯文本文件
- 优点:简单快捷
- 缺点:仅适用于纯文本文件,不支持复杂的配置
步骤:
a. 将所有待合并的文件放到同一个文件夹,确保该文件夹只有这些待合并的文件;
b. 新建txt文档,输入:
copy *.csv merged.csv ::合并csv用这个
copy *.txt merged.txt ::合并txt用这个
如此简单的命令也易于理解,即把当前路径下任何名称的txt或者csv写入到新的名为merged的txt或者csv文件中,其中merged文件名可以自定义。
c. 将该txt文档更改文件格式/后缀为.bat,双击运行。
Excel加载项(Add-in)/插件
- 适用性:Excel支持的文件
- 优点:集成的功能按钮,好用易懂
- 缺点:需额外下载或安装,一些插件需额外许可
有市场上成熟的各类Excel办公插件,也有小型的合并工作簿或工作表的加载项,其使用的步骤各不相同。以下列举一些,感兴趣的可以自行了解:
- 慧办公: 慧办公官网 (hbg666.com)
- 方方格子: Excel工具箱 插件-方方格子 工作室-做最专业的Excel工具箱 (ffcell.com)
- 如果使用WPS,会员功能中WPS智能工具箱也可以实现合并文件操作。
Power Query
- 适用性:各种文件类型,包括不限于Excel/Text/CSV/XML/JSON/文件夹,也可连接数据库等
- 优点:用户友好的数据分析工具,支持各类型文件,可直接进行数据清洗或后续可视化(利用Power BI)
- 缺点:略为复杂,需熟悉Excel,低版本Excel(Excel 2013及以下)需额外安装
主要步骤包括获取和连接数据、导入和清洗数据、完成合并等,这方面的教程和资源都很丰富,在此不赘述,详请参见下方References and Resources。
VBA(Visual Basic for Applications)
- 适用性:Excel支持的文件
- 优点:仅需利用Excel开发工具
- 缺点:较为复杂,需熟悉Excel,并了解基本编程语句
主要步骤 * :
a. 在Excel菜单栏中,点击开发工具,打开VBA;
b. 输入代码后运行:
Sub 合并目录所有工作簿全部工作表()
Dim MP, MN, AW, Wbn, wn
Dim Wb As Workbook
Dim i, a, b, d, c, e
Application.ScreenUpdating = False
MP = ActiveWorkbook.Path
MN = Dir(MP & "\" & "*.xls")
AW = ActiveWorkbook.Name
Num = 0
e = 1
Do While MN <> ""
If MN <> AW Then
Set Wb = Workbooks.Open(MP & "\" & MN)
a = a + 1
With Workbooks(1).ActiveSheet
For i = 1 To Sheets.Count
If Sheets(i).Range("a1") <> "" Then
Wb.Sheets(i).Range("a1").Resize(1, Sheets(i).UsedRange.Columns.Count).Copy .Cells(1, 1)
d = Wb.Sheets(i).UsedRange.Columns.Count
c = Wb.Sheets(i).UsedRange.Rows.Count - 1
wn = Wb.Sheets(i).Name
.Cells(1, d + 1) = "表名"
.Cells(e + 1, d + 1).Resize(c, 1) = MN & wn
e = e + c
Wb.Sheets(i).Range("a2").Resize(c,d).Copy .Cells(.Range("a1048576").End(xlUp).Row + 1, 1)
End If
Wbn = Wbn & Chr(13) & Wb.Name
Wb.Close False
End With
End If
MN = Dir
Range("a1").Select
Application.ScreenUpdating = True
MsgBox "共合并了" & a & "个工作薄下全部工作表。如下:" & Chr(13) & Wbn, vbInformation, "提示"
End Sub
*详细过程可参见下方References and Resources
Python
- 适用性:各种文件类型
- 优点:强大,可以很简单,也可以进行复杂的配置
- 缺点:需安装Python环境和对应的包(Package),并掌握Python基本语法
使用Python有不同的实现方式,这里概述其中较为简单的一种:
主要步骤 * :
a. 根据需要导入相关的包/模块,代码如下:
import pandas as pd #(必需)强大的数据分析模块
import os #os模块与操作系统进行交互,处理文件和目录
import numpy as np #numpy库用于多维数组计算
import re #re模块匹配字符串,理解正则表达式
b. 基本参数设置
Folder_Path = r'C:\foldername' #要合并的文件夹及其完整路径
SaveFile_Path = r'C:\foldername' #合并后要保存的文件路径
SaveFile_Name = r'merged.csv' #合并后要保存的文件名
os.chdir(Folder_Path) #修改当前工作目录
file_list = os.listdir() #将该文件夹下的所有文件名存入一个列表
c-1. 读取和追加写入(适用于csv)
#读取第一个CSV文件并包含表头,编码默认UTF-8
df = pd.read_csv(Folder_Path +'\\'+ file_list[0])
#将读取的第一个CSV文件写入合并后的文件保存
df.to_csv(SaveFile_Path+'\\'+ SaveFile_Name,encoding="UTF-8",index=False)
#循环遍历列表中各个CSV文件名,并追加到合并后的文件
for i in range(1,len(file_list)):
df = pd.read_csv(Folder_Path + '\\'+ file_list[i])
df.to_csv(SaveFile_Path+'\\'+SaveFile_Name,encoding="UTF-8",index=False, header=False, mode='a+')
c-2. concat方法(适用于excel和csv)
#建立空的列表,用于存储待合并的文件
new_list = []
#遍历目标文件夹中的所有待合并文件,读取并加入到列表中
for file in file_list:
file_path = os.path.join(Folder_Path,file)
dataframe = pd.read_excel(file_path)
new_list.append(dataframe)