你的需求,大概率是这样

手上有一张总表,某一列的值是"分类标签":

工号姓名所属部门本月业绩备注
1001张三销售一部128,000
1002李四销售二部96,500
1003王五销售一部143,200
…

你想按「所属部门」这一列,把它拆成 销售一部.xlsx、销售二部.xlsx、市场部.xlsx……

这就是「按某一列分类输出各个表格」。

听起来简单,但大多数人搜索完之后会卡在同一个地方 —— 拆出来了,格式没了。

下面把三条主流路线讲清楚,包括它们各自会在哪里翻车。


路线一:Power Query(Excel 自带,零代码)

路径:数据 → 获取和转换 → 筛选某一列的值 → 导出为新文件

优点:
- Excel 自带,零成本
- 不用写任何代码

缺点(这几条都是硬伤):

  1. 有多少个分类,就要重复操作多少遍。8 个部门 = 操作 8 次,每次都要筛选→导出→改名
  2. 只处理"数据",不处理"格式" —— 多层表头、合并单元格、条件格式、列宽、字体颜色全部丢失
  3. 拆完通常要重新排版一遍,分组多的时候比手动做还慢

适用:一次性任务、单行普通表头、拆完不需要给人看格式。


路线二:Python 脚本(openpyxl / pandas)

百度/CSDN 上能搜到大量代码。最小示例长这样:

import pandas as pd

df = pd.read_excel("总表.xlsx")
for dept, sub in df.groupby("所属部门"):
    sub.to_excel(f"输出/{dept}.xlsx", index=False)

看起来很美,实际用起来是这样:

问题说明
格式全丢pandas 走的是「读值 → 写值」路线,样式信息根本不在它的处理范围里
要保留格式?得改走 openpyxl 逐单元格复制,代码量翻好几倍(表头、合并区域、列宽、行高、数字格式……)
列名一变就得改代码这个月叫"所属部门",下个月叫"部门",脚本直接报错
表头不在第一行还得先告诉它表头在第几行,猜错了数据全错
双层拆分先按部门、再按人,得自己写两层循环
装环境得装 Python、装 openpyxl/pandas,对非技术岗是实打实的门槛

适用:有编程基础、需求长期稳定、或需要接进自动化流程的场景。

顺带说一句:为什么走 pandas / Power Query 格式必然丢?
xlsx 的格式信息(字体、填充、边框、合并区域、列宽、条件格式)存在文件内部的样式表里,
不是单元格值的一部分。只要走「读数据再写数据」的路线,样式就带不过来。
要保留,只能逐单元格复制样式 —— 这就是路线二的代价所在。


路线三:VBA 宏

VBA 能做,也能保住格式,但它的问题是门槛和工作量都摊在你身上:

  • 你得会写或者会改 VBA,不然报错只能干瞪眼
  • 网上抄来的代码,换个表(列名不同、表头行数不同)就跑不起来
  • 很多单位的 Excel 默认禁用宏,或者需要走审批才能开
  • 参数写死在代码里,每次改动都要进编辑器

适用:本身就在用 VBA 做自动化的老手。


路线四(我在用的):三步点击的本地工具

先说这类工具的核心能力应该是什么:保留格式 + 批量处理 + 零代码。

我用的是 ExcelRouter,免费开源,Windows 免安装(不用装 Python)。

操作就三步

步骤做什么
①点「📄 选一个 Excel 文件」,选你的总表
②「拆分字段」下拉里选 所属部门 —— 列名是工具自动识别出来的,不用你输入
③点「▶ 开始拆分」

输出文件夹里就是:

拆分结果/
├── 销售一部.xlsx
├── 销售二部.xlsx
├── 市场部.xlsx
└── …

每个文件打开后,表头和原表长得一模一样 —— 字体、颜色、边框、列宽、数字格式、
多层合并表头完整保留。不是"看起来相似",是打开后该拉公式拉公式、该改数改数的完整 .xlsx。

几个比脚本强的地方

  • 表头不在第一行也能自动找到 —— 前 15 行启发式扫描。有大标题、有空行的表都没问题
  • 整个文件夹批量拆 —— 一次处理一个文件夹里所有的表,逐个处理,单个出错不中断整体
  • 只拆其中几个值 —— 点「▸ 查看/勾选分组」勾掉不需要的,而且勾选结果会记住
  • 设置自动记住 —— 下个月打开工具,上次的配置还在,不用重设
  • 数据不出本机 —— 不联网、无遥测、断网可跑

什么时候你会需要"二级拆分"

如果收到这样的要求:「先按部门拆开,每个部门里再按人拆到每个人一份」——
勾一下「✅ 同时拆到人」,选「姓名」列,一次运行同时产出两套结果:
部门汇总 + 每个人一个独立文件,还自动按部门打包成 ZIP。

这是 Power Query 和大多数脚本模板做不到的。


四种方案横向对比

维度手动筛选粘贴Power QueryPython 脚本ExcelRouter
上手成本低(但极耗时)低高低
保留原格式⚠️ 容易乱❌⚠️ 需额外开发✅
多层合并表头❌❌⚠️ 需额外开发✅
批量多文件需手工重复需手工重复✅✅
二级拆分到人手工做两轮❌需自己实现✅
自动打包 ZIP❌❌需自己实现✅
数据出网否否否否(本地)
需要写代码否否是否

一个选择建议(省时间版)

判断顺序就三步:

  1. 看表头结构 —— 单行普通表头,Power Query 就够;有多层表头或合并单元格,
    必须选能保留格式的方案
  2. 看频率 —— 偶尔一次用自带功能;每周/每月都做、格式有要求,用能保留格式的工具
  3. 看是否要拆到人 —— 要拆到人(工资条、成绩单、考核表),Power Query 和多数脚本模板都做不了

下载

免费、免安装、免注册、无广告、不限次数,MIT 开源协议,商用也可以。

国内下载(推荐):
👉 https://gitee.com/Marsandsea/Excelrouter/releases
选文件名带 win64.zip 的 → 解压 → 双击 ExcelRouter.exe

GitHub:
👉 https://github.com/MarsandSea/ExcelRouter/releases

⚠️ 个别杀毒软件可能误报 —— PyInstaller 打包的常见现象,不是病毒。优先下 ZIP 版基本不触发。


常见问题

Q:我不会写代码,真能用吗?
能。选文件 → 选列名 → 点按钮。一行代码都不用写,也不用装 Python。

Q:表头不在第一行怎么办?
工具默认自动识别(扫描前 15 行)。识别不准时,「高级设置」里可以手动指定表头行号。

Q:拆出来文件名是什么?
就是那一列的取值本身。按「所属部门」拆就得到 销售一部.xlsx。取值里有
Windows 非法字符(\ / : * ? " < > |)会自动替换成下划线。目前不支持自定义文件名模板。

Q:某一列拆出来是空白?
大概率是那列有公式但从未被 Excel 计算过(没有缓存值)。用 Excel/WPS 打开原表,
Ctrl+S 保存一次再来拆。工具也会提前检测并预警。

Q:能拆多大的表?
实测几万行没问题。整个文件夹上百个文件也能跑。有实时进度和心跳日志,不会假死。

Q:能反过来把多个表合并成一个吗?
这不是通用合并工具。唯一的合并能力是在拆分过程中把同一个取值跨文件合并
(如 1–5 月每月一份表,按区域拆并且每个区域 5 个月合成一张)。


最后

「按某一列分类输出各个表格」这个需求本身不复杂,复杂的是格式不能乱这一条约束。
一旦把它当硬性条件,能选的方案就少了一大半。

工具免费开源,下载即用,不合用删掉就行。

觉得有用的话,去仓库点个 ⭐ Star,让更多人搜得到它。

作者:AbeLin
项目主页:https://github.com/MarsandSea/ExcelRouter
国内镜像:https://gitee.com/Marsandsea/Excelrouter

---

Logo

一站式 AI 云服务平台

更多推荐