Excel 按列批量拆分成多个工作簿:三种方案实测对比
背景
把一张总表按某一列拆成多个工作簿,是办公场景里非常高频的需求:按部门拆发给负责人、按区域拆做分发、按门店拆做台账。但大多数方案都会在同一个地方翻车——格式没了。
本文把三种常见做法列出来,说清各自的适用边界。
方案一:Power Query(零代码)
路径:数据 → 获取和转换 → 按列筛选 → 导出为新文件。
优点:
- Excel 自带,零成本
- 不用写任何代码
缺点:
- 部门/区域有多少个,就要重复操作多少遍
- 只处理「数据」,不处理「格式」:多层表头、合并单元格、条件格式、列宽全部丢失
- 拆完通常要重新排版一遍,分组多的时候比重做还慢
适用:一次性任务、单行普通表、拆完不需要给人看格式。
方案二:Python 脚本(openpyxl / pandas)
最小示例:
import pandas as pd
df = pd.read_excel("总表.xlsx", header=None)
groups = df.groupby(df.columns[key_col])
for name, sub in groups:
sub.to_excel(f"out/{name}.xlsx", index=False, header=False)
优点:格式和逻辑完全可控,能接后续流程(自动打 zip、自动发邮件)。
缺点:
- pandas 走的是「读数据」路线,样式、合并单元格、列宽同样会丢;要保留格式得改走 openpyxl 逐单元格复制(见第 5 篇)
- 双层分组(先按部门、再按人)需要自己写两层循环
- 表头行数、字段位置一变动就要改代码
适用:有编程基础、需求长期稳定、或需要接自动化流程的场景。
方案三:专用工具
这类工具的核心能力就是「保留格式」和「批量处理」,直接选一张表、指定拆分列即可。
- 拆出来的每个文件,表头、颜色、合并单元格、列宽与原表一致
- 支持整个文件夹批量处理
- 支持「二级拆分」:先按部门拆,再在每个部门内按人拆到一人一个文件
- 支持只对文件名含特定关键字的表执行二级规则
三种方案对比
| 维度 | Power Query | Python 脚本 | 专用工具 |
|---|---|---|---|
| 上手成本 | 低 | 高 | 低 |
| 保留格式 | 否 | 需额外处理 | 是 |
| 批量处理 | 需重复操作 | 可 | 是 |
| 二级拆分 | 否 | 需自己实现 | 是 |
| 适合场景 | 一次性、无格式要求 | 长期、需接流程 | 长期、格式有要求 |
总结
- 先看表头结构:单行普通表,Power Query 就够;有多层表头或合并单元格,必须选保留格式的方案
- 看频率:偶尔一次用自带功能;每周都做、格式有要求,用能保留格式的工具
- 看是否需要二级拆分:需要拆到人(如工资条),Power Query 和多数脚本模板都做不了
- 无论哪种方案,操作前先备份原表,先拿小样本跑一遍
文中的专用工具是 ExcelRouter,开源 MIT 协议:
文中提到的工具:ExcelRouter
把一个或一整批 Excel 按部门、区域、工号等字段拆成多个文件,完整保留复杂表头与格式, 可再按人二级拆分并打包 ZIP。Windows + 银河麒麟 / 统信 UOS,免费开源(MIT), 全程本机处理,不联网、不上传。
下载(国内 · Gitee) GitHub 源码 ⭐