跳转到主要内容

04 · 按分组拆分文件

场景

你有一份续约报表,希望按区域拆成多个 .xlsx,而不是一个大文件。这样操作员可以把每个区域的文件直接交给对应区域的团队。

__config__

source_sheet原始
source_table1
output_file_pattern{{ [区域] }}.xlsx

分组键就是你在 output_file_pattern 里引用的内容。xl3 按该模式解析出的值对源行分组,每个不同的值生成一个文件。

数据(工作表 原始

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

输出

两个文件:

  • 北京.xlsx——包含 北京物流 + 核源食品 两行。
  • 上海.xlsx——包含 上海贝塔工程。

多键文件分组

output_file_pattern = {{ [区域] }}-{{ [等级] }}.xlsx

分组键变成元组 (区域, 等级)。不同的元组对应不同的文件。例如 北京-A.xlsx北京-B.xlsx上海-A.xlsx 等。

文件名净化

xl3 按 ADR-0002 对文件名进行净化:/ \ : * ? " < > | 中的禁止字符(含控制字符)会被逐字符替换为 _,之后再去掉开头空白与末尾的点 / 空格。不会把连续的 _ 合并。如果两个不同的分组值净化后变成同一文件名——例如 Seoul/KoreaSeoul:Korea 都会变成 Seoul_Korea.xlsx(每个禁止字符变一个 _)——xl3 会按 ADR-0031 抛出 xl3/filename/collision 而不是静默覆盖。

空的分组键

如果某行的分组键值为空,xl3 会按 Excel 数据透视表惯例替换为字面量 (blank)(ADR-0026)。文件最终落到 (blank).xlsx

备注

  • 文件顺序按 ADR-0016 的"首次出现"规则——按行在源中出现的先后排序。
  • 想在同一个文件里按区域拆工作表,请看 Recipe 05