excel-split-by-column

按指定列的值把一张 Excel 大表拆分成多个工作表(单文件)或多个独立 xlsx 文件。自动检测拆分列(部门/城市/分类/状态类),处理非法 sheet 名、空值归组"未填写",并生成拆分汇总。当用户上传大表并要求"按部门拆开"、"按城市分成多个表"、"拆分成多个文件"、"分类拆分"时触发。

Install

openclaw skills install @dont4getme-2/excel-split-by-column

按列拆分 Excel 表格

何时使用

当用户有一张大表(员工花名册、订单明细、报名表、物料清单),并需要:

  • 按某列(部门/城市/大区/分类/状态/校区/门店…)拆成多个子表
  • 拆到同一个文件的多个 sheet,或拆成多个独立文件分发
  • 每个子表自动带表头、冻结首行,并知道每组有多少行

触发词:拆分、按部门拆开、按城市分表、分成多个文件、分类拆分、下发到各组

核心流程

步骤 1: 确认输入

  • 源文件路径(xlsx)
  • 拆分列(默认自动检测:表头含"部门/城市/大区/分类/状态…"类关键词、且唯一值在 2~30 之间的列;用户指定则用 --column
  • 拆分模式:sheets(单文件多 sheet,默认)或 files(多文件)

步骤 2: 运行脚本

bash
# 拆成多个 sheet, 输出 原名_split.xlsx
python scripts/split_by_column.py "<源文件.xlsx>" --column "所属部门" --mode sheets

# 拆成多个独立文件, 输出到 原名_split/ 目录
python scripts/split_by_column.py "<源文件.xlsx>" --column "城市" --mode files --outdir "<输出目录>"

步骤 3: 汇报结果

转述脚本打印的拆分统计(每组值 → sheet/文件名 → 行数,合计)。

拆分规则速查

规则说明
分组拆分列值(trim 后)相同归一组,分组名排序输出
空值列值为空的行归入"未填写"组,不丢弃
sheet 名替换 \ / * ? : [ ]_;超 28 字符截断;重名自动加 _2 后缀
汇总sheets 模式第一个 sheet 是"拆分汇总"(分组值/sheet名/行数/合计)

技术注意点

  1. 列自动检测的边界:唯一值 > 30 的列(如姓名列)不会被选中;找不到时脚本会报错并列出可用列,让用户 --column 指定
  2. 文件名冲突:files 模式下不同分组名清洗后可能同文件名(如 "研发-部" 和 "研发部"),已通过 used 集合去重
  3. 原始数据不动:读 data_only=True,公式取计算值,原文件不修改
  4. 超长文本列宽:列宽自适应封顶 40,避免超长文本撑爆