04 · 按分组拆分文件
场景
你有一份续约报表,希望按区域拆成多个 .xlsx,而不是一个大文件。这样操作员可以把每个区域的文件直接交给对应区域的团队。
__config__
| 键 | 值 |
|---|---|
source_sheet | 原始 |
source_table | 1 |
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/Korea 和 Seoul:Korea 都会变成 Seoul_Korea.xlsx(每个禁止字符变一个 _)——xl3 会按 ADR-0031 抛出 xl3/filename/collision 而不是静默覆盖。
空的分组键
如果某行的分组键值为空,xl3 会按 Excel 数据透视表惯例替换为字面量 (blank)(ADR-0026)。文件最终落到 (blank).xlsx。