Google Sheets Reduce函数问题:套件工具排序异常求助
解决方案
修正后的公式
=LET( loc, B4, data, FILTER(DATABASE!F:K, DATABASE!L:L=loc), mainTools, FILTER(data, ISBLANK(data[Column6])), sortedMain, SORT(mainTools, 1, 1), result, REDUCE(TOCOL(,1), SEQUENCE(ROWS(sortedMain)), LAMBDA(a, i, LET( mainRow, INDEX(sortedMain, i,), mainID, INDEX(mainRow, 1), subTools, FILTER(data, data[Column6]=mainID), subSorted, SORT(subTools, 1, 1), kitHeader, IF(ROWS(subTools)>0, REGEXREPLACE(mainID, "^.*? - ", ""), ""), VSTACK(a, IF(ROWS(subTools)>0, kitHeader, ""), subSorted, IF(ROWS(subTools)=0, mainRow, "")) ) )), FILTER(result, NOT(TOCOL(ISBLANK(result), 1))) )
公式说明
- 变量封装:用
LET简化逻辑,先筛选出当前位置(B4)对应的所有工具数据,包含工具信息与套件关联列 - 主工具排序:分离出不属于任何套件的主工具(
K列空白),按工具ID(第1列)升序排序,确保整体顺序符合要求 - 批量处理主工具与套件:
- 逐个读取排序后的主工具,筛选出隶属于该主工具的套件子工具
- 对子工具按ID排序,生成去除前缀的套件标题
- 按「套件标题→子工具」或「主工具」的结构堆叠内容
- 空行清理:过滤堆叠过程中产生的空行,输出整洁的结果
自定义调整
如果排序依据不是工具ID,而是其他字段(比如位置内的自定义排序号),只需修改SORT函数的第2参数为对应列的序号即可(例如按第2列排序,改为SORT(mainTools, 2, 1))
内容的提问来源于stack exchange,提问作者J-Drake
相关产品推荐
相关产品推荐

