几十个 Excel 汇总成一张总表?Python 自动拼接还标来源

2026-10-02 · 喵窝资源铺

各门店/各区域/各个月份各发一个 Excel,月底要把它们拼成一张总表——手动复制粘贴几十次,还要防漏行、防格式错位。这篇给一个 本地运行 的 pandas 脚本:把一个文件夹里所有 xlsx 按 sheet 名纵向拼成一张总表,每个文件一个 sheet,并且自动加一列「来源文件」,出问题能追到是哪个文件的数据。本文代码实跑验证,真实输出见下。

完整脚本

先 pip install pandas openpyxl,脚本保存为 merge_excel.py,在 Excel 文件夹里运行 python merge_excel.py . 汇总.xlsx:

"""批量合并Excel:目录下所有xlsx按sheet名纵向拼接成总表。用法:python merge_excel.py [目录] [输出文件]"""
import os, sys, glob
import pandas as pd

FOLDER = sys.argv[1] if len(sys.argv) > 1 else "."
OUT = sys.argv[2] if len(sys.argv) > 2 else "汇总.xlsx"
files = [f for f in sorted(glob.glob(os.path.join(FOLDER, "*.xlsx")))
         if os.path.basename(f) != OUT]
if not files:
    sys.exit("没找到xlsx文件")

# 先按sheet名把各文件的数据攒起来,最后一次性写出
# (直接在ExcelWriter里逐个to_excel会因同名sheet互相覆盖,只剩最后一个文件)
grouped = {}
for f in files:
    xls = pd.ExcelFile(f)
    for sheet in xls.sheet_names:
        df = pd.read_excel(f, sheet_name=sheet)
        df["_来源文件"] = os.path.basename(f)
        grouped.setdefault(sheet[:31], []).append(df)

with pd.ExcelWriter(os.path.join(FOLDER, OUT)) as w:
    for sheet, dfs in grouped.items():
        pd.concat(dfs, ignore_index=True).to_excel(w, sheet_name=sheet, index=False)

print(f"合并了 {len(files)} 个Excel -> {OUT}")
for f in files:
    print(" +", os.path.basename(f))
for sheet, dfs in grouped.items():
    print(f"  sheet[{sheet}]: {sum(len(d) for d in dfs)} 行")

实跑结果

我造了 3 个测试 Excel(华东区/华南区/华北区,都是「销售」sheet,共 5 行数据),跑一遍的输出:

合并了 3 个Excel -> 汇总.xlsx
 + 华东区.xlsx
 + 华北区.xlsx
 + 华南区.xlsx
  sheet[销售]: 5 行

验证产物:汇总.xlsx 里「销售」sheet 共 5 行数据,和 3 个源文件加起来对得上,每行都带上了来源标注:

日期产品金额_来源文件
2026-09-01鼠标89华东区.xlsx
2026-09-02键盘199华东区.xlsx
2026-09-05耳机249华北区.xlsx
2026-09-03显示器899华南区.xlsx
2026-09-04鼠标79华南区.xlsx

再跑一遍验证幂等:还是合并 3 个源文件、还是 5 行——汇总.xlsx 自己没有被并进去。

三个容易踩的坑(都是真踩过的)

再往上是什么活?

脚本处理的是「每个文件一个 sheet、列名一致」的标准情况。如果你要的是「各文件列名不一样要映射」「合并后按条件去重」「合并完直接出透视表和图发给老板」——逻辑要再包一层,可以直接找我们代写(见下)。

懒得自己跑?找我们代写
喵窝资源铺提供 Python 脚本代写服务:你说清楚文件长什么样、要什么结果,我们写好脚本、用你的真实数据测试通过再交付,24 小时内出活。AI 服务,明码标价,先看效果再付款。
👉 了解代写服务 | 联系我们

相关阅读:批量合并 PDF | 批量重命名文件 | 批量压缩图片 | Python 自动化能帮你做什么