跳转到主要内容

05 · 按分组拆分工作表

场景

同样的续约报表,但只输出一个文件,并按区域拆成不同工作表。再加一个"非续约"工作表,按特定状态列表过滤。

思路:用分组键命名模板工作表

模板工作表的名字本身就是工作表模板。xl3 会按分组键的每个不同值展开一份工作表,内容沿用模板里的内容。

模板工作表名: Region-{{ [区域] }}

xl3 读到字面量名 Region-{{ [区域] }},按 区域 列对源行分组,并按解析后的名字逐区域生成工作表:Region-北京Region-上海 等。

__config__

source_sheet原始
source_table1
output_file_patternregions.xlsx

模板(工作表名 Region-{{ [区域] }}

单元格
A1客户
B1续约金额
A2{{ [客户] }}
B2{{ [续约金额] }}
A3合计
B3{{ SUM([续约金额]) }}

数据

客户区域续约金额
北京物流北京18400
上海贝塔工程上海7200
核源食品北京25100

输出(regions.xlsx

  • 工作表 Region-北京:北京物流、核源食品、合计=43500。
  • 工作表 Region-上海:上海贝塔工程、合计=7200。

按命名列表过滤工作表

常见形态:按分组生成多张工作表,再加一张"全部 < 5000 元的续约"工作表,按状态列表过滤。使用 __lists__

__lists__:
status_active: ["有效", "续约中"]
status_inactive: ["已取消", "已失效"]

然后在工作表模板里:

模板工作表名:At-Risk
A1: 客户 | B1: 状态 | C1: 续约金额
A2: {{ @filter [状态] in __lists__[status_active] }}{{ @filter [续约金额] < 5000 }}{{ [客户] }}
B2: {{ [状态] }}
C2: {{ [续约金额] }}

一个数据块里写多个 @filter 指令时,它们以 AND 组合。每个过滤器都在前一个结果的基础上继续收窄。

备注

  • 工作表名净化遵循 Excel 31 字符限制 + 禁止字符([ ] / \ ? *)。净化后冲突的情况按 ADR-0021 属于实现自定义——请在上游保持分组键彼此不同。
  • 空的分组键 → 字面量 (blank)(ADR-0026)。
  • 工作表顺序按 ADR-0016 的"首次出现"规则。