🧮 WPS 递归 | 标签打印:4层递归之递归中归中归中归 封神榜!!!
仓库打工人、单证打印朋友刚需!原始订单数据,根据总数量自动拆分,每单上限自定义数量,拆分后自动批量生成标准标签卡片,自带固定表头、完整订单信息、横排多列自动排版、卡片间隔留白、整页自动溢出生成!4 层嵌套递归环环相扣,从数量拆分→单行标签生成→多行数据遍历→整页多列排版,全部纯原生函数一步搞定,不用辅助列、不用复制排版、不用 VBA。今天完整拆解整套 4 层递归公式,每一层自定义函数单独详解、入参参数全释义、函数内部逻辑、每层递归专属作用、整体调用链路全部讲透。
📌 案例背景
数据源区域:B5:D23
B4:D4:固定标签表头(订单号、物料编码、数量)
B5:D23:原始订单明细(每一行 1 条完整订单:订单号 + 物料编码 + 原始总数量)
G2:单张标签最大拆分数量上限(本例 = 9)
F2:整页横向每排展示标签个数(本例 = 4)
需求:
数量拆分:每条原始订单,按照设定上限自动拆分总数量,生成多条子订单,拆分后所有子数量之和 = 原始总数量
标签生成:每一条拆分后的子订单,自动生成完整标准标签卡片(自带表头 + 完整数据行)
自动排版:全部标签横向多列排布、卡片之间自动留白间隔,完整整页动态溢出生成,完美匹配右侧最终展示效果。
🧩 完整公式源码(原版完整格式化排版版)
excel
=LET(
TAT,LAMBDA(a,b,IF(TAKE(a,,-1)<=b,a,
VSTACK(HSTACK(TAKE(a,,2),b),TAT(HSTACK(TAKE(a,,2),TAKE(a,,-1)-b),b)))),
TBT,LAMBDA(a,b,IF(ROWS(a)=1,TAT(a,b),
VSTACK(TAT(TAKE(a,1),b),TBT(DROP(a,1),b)))),
TCT,LAMBDA(a,b,IF(ROWS(a)=1,TRANSPOSE(VSTACK(b,a)),
HSTACK(EXPAND(TRANSPOSE(VSTACK(b,TAKE(a,1))),,3,""),TCT(DROP(a,1),b)))),
TDT,LAMBDA(a,b,c,IF(ROWS(a)<=c,TCT(a,b),
IFNA(VSTACK(EXPAND(TCT(TAKE(a,c),b),4,,""),TDT(DROP(a,c),b,c)),""))),
TDT(TBT(B5:D23,G2),B4:D4,F2))
逻辑太难,没画,喜欢的可以研究一下。
🧩 四层递归函数逐层级全拆解
严格从上到下,从底层最基础函数 → 顶层总控函数,逐个讲解:函数名称、入参 3 个参数含义、内部 IF 逻辑、函数专属作用、内部函数用法、承担的工作模块,新手逐层看懂嵌套逻辑。
1. 第一层 底层核心:TAT 数量拆分专用递归函数
excel
TAT,LAMBDA(a,b,
IF(TAKE(a,,-1)<=b,a,
VSTACK(HSTACK(TAKE(a,,2),b),
TAT(HSTACK(TAKE(a,,2),TAKE(a,,-1)-b),b))))
函数入参参数释义
a:单行原始订单数据数组(订单号 + 物料编码 + 原始总数量 3 列单行数据)
b:单张标签最大数量上限值(单元格 G2,本次拆分阈值)
内部逻辑 & 递归作用
整个公式的最底层核心拆分函数,唯一工作:单条订单总数量,按照设定上限自动拆分
终止条件 IF(TAKE(a,,-1)<=b, a, ...)
提取当前数据最后一列(原始总数量),判断剩余数量 ≤ 设定上限
满足条件:无需继续拆分,直接返回本条完整订单数据,拆分递归终止。
拆分递归主体
HSTACK(TAKE(a,,2),b):固定保留「订单号、物料编码」不变,本次拆分数量直接填充为上限值b,生成 1 条完整拆分子订单
TAKE(a,,-1)-b:总数量减去本次拆分上限,计算剩余待拆分数量
TAT(新剩余数据,b):剩余数量再次传入自身递归,继续拆分,直到全部数量拆分完毕
VSTACK:把所有拆分出来的子订单,全部纵向堆叠完整
2. 第二层 数据遍历:TBT 全量原始订单遍历递归函数
excel
TBT,LAMBDA(a,b,
IF(ROWS(a)=1,TAT(a,b),
VSTACK(TAT(TAKE(a,1),b),TBT(DROP(a,1),b))))
函数入参参数释义
a:全部原始多行订单数据源数组(整张原始订单明细表)
b:单张标签数量拆分上限(向下透传底层 TAT 函数的拆分阈值)
内部逻辑 & 递归作用
承上启下的遍历函数,工作:批量遍历所有原始订单,逐行调用底层 TAT 拆分函数,完成全部订单全量拆分
终止条件 IF(ROWS(a)=1, TAT(a,b), ...)
当前剩余数据只剩单行订单,直接调用底层TAT完成本条全部数量拆分,本条遍历结束。
遍历递归主体
TAKE(a,1):提取当前第 1 行原始订单
TAT(TAKE(a,1),b):调用底层函数,完成本条订单完整数量全拆分
DROP(a,1):砍掉已经处理完毕的本行订单,剩余未处理全部数据
TBT(DROP(a,1),b):剩余数据递归自身,逐行遍历所有订单
VSTACK:把所有订单拆分完的全部子订单,全部纵向堆叠成完整总数据集。
3. 第三层 标签生成:TCT 单行标签卡片生成递归函数
excel
TCT,LAMBDA(a,b,
IF(ROWS(a)=1,TRANSPOSE(VSTACK(b,a)),
HSTACK(EXPAND(TRANSPOSE(VSTACK(b,TAKE(a,1))),,3,""),TCT(DROP(a,1),b))))
函数入参参数释义
a:经过前两层拆分完成后的,全部子订单数据集
b:固定全局表头(B4:D4 订单号、物料编码、数量表头)
内部逻辑 & 递归作用
标签格式化函数,工作:把每一条拆分完成的子订单,生成标准 3 行标签卡片,同时横向初步排版
终止条件 IF(ROWS(a)=1, TRANSPOSE(VSTACK(b,a)), ...)
当前只剩单条子订单数据
VSTACK(b,a):垂直堆叠【表头行 + 数据行】,再TRANSPOSE转置,生成3 行 1 列标准标签卡片,标签生成递归终止。
卡片生成递归主体
TAKE(a,1):提取当前单条子订单
TRANSPOSE(VSTACK(b,TAKE(a,1))):生成本条完整标准标签卡片
EXPAND(,,,3,""):卡片右侧扩展 3 列空白,实现标签之间间隔留白
DROP(a,1):砍掉已处理本条子订单,剩余数据
TCT(DROP(a,1),b):剩余数据递归自身,生成下一个标签卡片
HSTACK:把所有生成好的标签卡片,横向依次并排拼接。
4. 第四层 顶层总控:TDT 整页多列分页排版总递归函数
excel
TDT,LAMBDA(a,b,c,
IF(ROWS(a)<=c,TCT(a,b),
IFNA(VSTACK(EXPAND(TCT(TAKE(a,c),b),4,,""),TDT(DROP(a,c),b,c)),"")))
函数入参参数释义
a:经过前三层全部处理完的,所有待排版完整标签数据集
b:全局固定表头(向下透传给 TCT 函数)
c:整页横向每排最大标签列数(单元格 F2,本例 = 4,一行最多放 4 个标签)
内部逻辑 & 递归作用
整个公式最顶层总控递归函数,全局统筹所有底层函数,最终完成整页分页排版
终极全局终止条件 IF(ROWS(a)<=c, TCT(a,b), ...)
剩余待排版标签总数 ≤ 横向每排最大列数
剩余所有标签全部直接调用 TCT 完成排版生成,整体全部递归彻底终止。
顶层排版递归主体
TAKE(a,c):提取当前一排需要展示的c个标签
TCT(TAKE(a,c),b):调用第三层函数,完成本排全部标签卡片生成 + 横向排版
EXPAND(...,4,,""):整排卡片下方扩展 4 行空白,实现上下排标签的行间距留白
DROP(a,c):砍掉本排已经排版完成的全部标签,剩余未排版数据集
TDT(DROP(a,c),b,c):剩余标签递归自身,进入下一排排版
VSTACK:所有排数全部上下垂直堆叠,生成完整整页排版结果
IFNA(,""):异常数据容错,空白报错自动屏蔽。
🧩 最末尾初始总调用全解析
excel
TDT(TBT(B5:D23,G2),B4:D4,F2)
四层函数完整调用链路,从外到内启动顺序:
先执行内层 TBT(B5:D23,G2):全量原始订单全部完成数量拆分,输出全量拆分子订单
传入顶层总函数:TDT(拆分完全量数据, 固定表头B4:D4, 横向每排列数F2)
一键启动整套四层递归,从底层拆分→数据遍历→标签生成→整页排版,全部流程自动跑完,最终完整溢出生成全部排版标签。
⚖️ 公式核心亮点 & 干货总结
延续全系列帖子统一总结模块
四层递归分工极致清晰,模块完全解耦
拆分、遍历、标签生成、页面排版 4 个工作完全独立成单独递归函数,每层只做一件事,嵌套逻辑干净,后续修改规则只需要改动对应单层函数即可。
全参数自定义,通用性极强
拆分数量上限、每排标签个数、标签间隔留白、卡片格式全部可自定义,仅修改 G2、F2 单元格数值即可适配所有订单数据。
全自动全流程闭环
原始订单导入 → 自动数量拆分 → 自动生成标准标签 → 自动多列排版、自动卡片留白间隔,全程无需手动操作。
原生动态数组溢出
仅单个单元格输入完整公式,全部标签整页自动溢出生成,无辅助列、无下拉填充、无复制排版。
全原生函数兼容
全程仅使用 LET/LAMBDA/VSTACK/HSTACK/TAKE/DROP/EXPAND/TRANSPOSE 现代原生数组函数,WPS 最新版、Microsoft 365 Excel 全部通用。
💡 多层递归底层通用复盘
结合全系列所有 LAMBDA 递归案例,统一嵌套递归底层规律:底层函数解决最小单元问题 → 中层函数批量遍历处理全量数据 → 中层函数完成格式封装生成 → 顶层函数全局统筹整体排版每层递归严格独立闭环,只处理自身模块工作,参数向下透传,结果向上回溯堆叠,完美实现复杂办公需求模块化拆解。
📢 结尾互动
仓库标签打印、订单单证拆分打工人神器!四层递归一站式搞定「数量自动拆分 + 标准标签生成 + 整页多列排版」,改改数字就能适配所有物料订单!还想要更多 LAMBDA 多层嵌套递归实战案例、公式精简优化的朋友,评论区留言!