← 返回喵窝首页 · 免费工具清单(留邮箱即发)

把 30 个 Excel 表合成一张总表:不用 VBA 的 4 种方法(附代码)

发布于 2026-09-29 · 本文由 AI 整理、人工核验,所有代码均在 Python 3.11 + pandas 2.x 实测可跑。

先对号入座:你要哪种"合并"?

场景正确做法
30 个同结构的文件(各月/各部门),想上下堆成一张长表方法一(推荐)
一个工作簿里十几个 Sheet,想合成一张表方法二
两个表按"姓名/订单号"这类关键字段左右对齐补数据方法三(merge)
完全不想装 Python方法四(Power Query)

最常见的错误是用「复制-粘贴」解决场景一——粘贴 30 次还容易把表头也粘进来。下面每种方法都给出完整代码。

方法一:一个文件夹里的所有 xlsx,纵向合并(最常用)

import glob
import pandas as pd

files = glob.glob("./报表/*.xlsx")   # 把路径换成你的文件夹
dfs = []
for f in files:
    df = pd.read_excel(f)
    df["来源文件"] = f.split("/")[-1]   # 留个痕迹,方便回查
    dfs.append(df)

total = pd.concat(dfs, ignore_index=True)
total.to_excel("./总表.xlsx", index=False)
print(f"合并 {len(files)} 个文件,共 {len(total)} 行")

三个高频翻车点:

方法二:一个工作簿里的多个 Sheet 合并

import pandas as pd

sheets = pd.read_excel("./月报.xlsx", sheet_name=None)  # dict: {sheet名: DataFrame}
total = pd.concat(
    [df.assign(月份=name) for name, df in sheets.items()],
    ignore_index=True,
)
total.to_excel("./全年总表.xlsx", index=False)

sheet_name=None 是关键——它让 pandas 返回"所有 Sheet 的字典",省去逐个读。

方法三:按关键字段左右对齐(VLOOKUP 的代码版)

import pandas as pd

orders = pd.read_excel("./订单.xlsx")
users  = pd.read_excel("./会员.xlsx")

merged = orders.merge(users, on="会员ID", how="left")
merged["是否会员"] = merged["等级"].notna()
merged.to_excel("./订单_标记会员.xlsx", index=False)

how="left" 表示以订单表为主、匹配不上也保留——这正是 VLOOKUP 容易丢行的场景,代码版反而更稳。匹配不上的行"等级"会是空,用 notna() 一列就标记出来了。

方法四:不会代码,用 Power Query(Excel/WPS 自带)

  1. 数据 → 获取数据 → 从文件夹,选中放报表的文件夹;
  2. 点「组合」→「合并并转换数据」,选任意一个文件做样例;
  3. 确认列对齐后确定,所有文件自动追加成一张表;
  4. 以后把新文件丢进文件夹,右键结果表点「刷新」即可——这是它比方法一强的地方:一次配置,长期自动。

代价:一次性需求用它反而绕;文件结构不一致时它报错比较难懂。30 个以上文件、每月重复 → Power Query;临时一次性 → 方法一。

自检清单(合并完先别交)

检查项怎么做
行数对不对各文件行数之和 = 总表行数(合计行记得排除)
表头没混进数据搜一下总表里有没有"合计""部门"这类词出现在数据行
日期/数字没变文本total.dtypes 看一眼,或者 Excel 里筛选测试
能溯源保留"来源文件"列,出问题能定位到是哪张表
没时间弄?喵窝资源铺提供 ¥19.9 表格处理服务:你把文件打包发过来(或描述需求),AI 写脚本 + 人工核验跑通后交付成品和代码,24 小时内交付,跑不通免费改到通。→ 去下单(虚拟服务,交付后不退款;未达承诺免费重做)

相关阅读

Excel 数据清洗:去重/拆列/去空格的 5 段代码 · 30 行 Python 整理 800 个混乱文件 · 1 小时完成一份像样的调研

← 返回喵窝资源铺

相关阅读:两份流水账自动对账脚本(实测)