# 一键批量合并多个Excel文件,学会这3种方法就够了
在日常办公中,我们经常需要将多个Excel文件合并成一个。无论是月度报表、季度数据还是年度统计,批量合并Excel都是办公自动化的基础技能。本文介绍3种最常用的方法,帮助你告别手动复制粘贴的低效工作。
# 方法一:Python pandas 合并法
这是最简单、最强大的方法,特别适合处理大量文件。
# 安装依赖
pip install pandas openpyxl
# 批量合并代码
import pandas as pd
import glob
import os
def merge_excel_files(folder_path, output_file='merged.xlsx'):
"""
合并指定文件夹下所有Excel文件
:param folder_path: 文件夹路径
:param output_file: 输出文件名
"""
# 获取所有Excel文件
excel_files = glob.glob(os.path.join(folder_path, '*.xlsx'))
if not excel_files:
print("未找到Excel文件!")
return
# 读取所有文件
df_list = []
for file in excel_files:
print(f"正在读取: {file}")
df = pd.read_excel(file)
df['来源文件'] = os.path.basename(file) # 标记数据来源
df_list.append(df)
# 合并数据
merged_df = pd.concat(df_list, ignore_index=True)
# 保存结果
merged_df.to_excel(output_file, index=False)
print(f"合并完成!共 {len(excel_files)} 个文件,{len(merged_df)} 条数据")
# 使用示例
merge_excel_files('D:/月度报表/2024年', '年度汇总.xlsx')
# 运行效果
正在读取: D:/月度报表/2024年/1月.xlsx
正在读取: D:/月度报表/2024年/2月.xlsx
正在读取: D:/月度报表/2024年/3月.xlsx
...
合并完成!共 12 个文件,3650 条数据
# 方法二:按Sheet名称合并
如果你需要将多个文件中的同名Sheet合并,可以使用下面的代码:
import pandas as pd
import glob
import os
def merge_by_sheet(folder_path, sheet_name='数据', output_file='merged_by_sheet.xlsx'):
"""按Sheet名称合并"""
excel_files = glob.glob(os.path.join(folder_path, '*.xlsx'))
df_list = []
for file in excel_files:
try:
df = pd.read_excel(file, sheet_name=sheet_name)
df['来源文件'] = os.path.basename(file)
df_list.append(df)
except Exception as e:
print(f"处理 {file} 时出错: {e}")
if df_list:
merged = pd.concat(df_list, ignore_index=True)
merged.to_excel(output_file, index=False)
print(f"合并完成!共 {len(df_list)} 个Sheet")
merge_by_sheet('D:/销售数据', sheet_name='月度汇总')
# 方法三:使用 python-office 库
程序员晚枫开发的 python-office 库提供了一行代码合并Excel的功能:
import python-office
# 一行代码合并多个Excel文件
python-office.excel.merge(r'D:/待合并文件夹', r'D:/输出路径/合并结果.xlsx')
# 三种方法对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| pandas法 | 大量文件、复杂处理 | 灵活强大 | 需要写代码 |
| 按Sheet合并 | 统一模板的报表 | 精确匹配 | 需要同名Sheet |
| python-office | 快速合并、简单场景 | 一行代码 | 功能相对简单 |
# 实战案例:年度销售数据汇总
某公司有12个月的销售数据,每个月一个文件,需要汇总全年数据:
import pandas as pd
import glob
from datetime import datetime
def yearly_sales_summary(data_folder):
"""年度销售汇总"""
files = glob.glob(f"{data_folder}/*.xlsx")
all_data = []
for f in files:
df = pd.read_excel(f)
df['月份'] = os.path.basename(f).replace('.xlsx', '')
all_data.append(df)
# 合并
merged = pd.concat(all_data, ignore_index=True)
# 生成汇总报表
summary = merged.groupby('产品').agg({
'销售额': 'sum',
'数量': 'sum',
'利润': 'sum'
}).round(2)
summary.to_excel('年度汇总报表.xlsx')
return summary
# 使用
yearly_sales_summary('D:/2024年销售数据')
# 注意事项
- 文件编码:确保源文件编码一致
- 表头行:如果表头有多行,指定
header参数 - 数据清洗:合并前建议先检查数据格式
- 备份文件:重要数据操作前先备份
# 相关资源
- python-office 官方文档 - Python自动化办公库
- AI + 自动化办公课程 - 35讲AI办公自动化实战
- Excel 自动化办公 - 更多Excel处理技巧
- Python 批量处理文件 - 文件处理进阶
- 📺 视频课程:程序员晚枫的Python自动化办公50讲
# 总结
批量合并Excel是办公自动化的基础技能。推荐从 python-office 开始学起,简单场景用一行代码搞定;复杂需求用 pandas 处理。学会这3种方法,你的数据处理效率至少提升10倍!