You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ARRAYFORMULA生成稀疏层级表格的完整层级路径列

问题原因

你现有代码的核心问题是FRUIT列的填充逻辑是全局查找最近的非空值,没有和SEASON分组绑定,新SEASON出现时不会自动清空之前缓存的FRUIT值,因此会把上一个季节的FRUIT带到新季节的路径中。

可用实现代码

假设你的三列分别对应命名范围SEASON、FRUIT、LETTER,可以用以下公式实现需求:

=ARRAYFORMULA(
  IF(SEASON="",,
    // 填充当前行对应的SEASON值
    IFERROR(VLOOKUP(ROW(SEASON), IF(SEASON<>"", {ROW(SEASON), SEASON}), 2, 1), "")
    & "/" &
    // 填充当前行对应SEASON分组内的FRUIT值,新SEASON出现时自动重置为空
    SCAN("", ROW(SEASON), LAMBDA(acc, r, 
      LET(idx, r-ROW(SEASON)+1,
        IF(INDEX(SEASON, idx)<>"", "",
          IF(INDEX(FRUIT, idx)<>"", INDEX(FRUIT, idx), acc)
        )
      )
    ))
    & "/" &
    LETTER
  )
)

如果你的数据是放在普通列范围(比如SEASON在A2:A,FRUIT在B2:B,LETTER在C2:C,表头在第一行),可以用更简化的写法:

=ARRAYFORMULA(
  IF(A2:A="",,
    IFERROR(VLOOKUP(ROW(A2:A), IF(A2:A<>"", {ROW(A2:A), A2:A}), 2, 1), "")
    & "/" &
    SCAN("", ROW(A2:A), LAMBDA(acc, r, 
      IF(INDEX(A:A,r)<>"", "", IF(INDEX(B:B,r)<>"", INDEX(B:B,r), acc))
    ))
    & "/" &
    C2:C
  )
)

逻辑说明

  1. SEASON的填充逻辑和你原有实现一致,通过全局向上查找最近的非空SEASON值补全空单元格。
  2. FRUIT的填充逻辑做了分组适配:用SCAN函数遍历每行,只要当前行的SEASON有值(说明进入新的季节分组),就立刻把FRUIT的缓存值重置为空;如果当前行FRUIT有值就更新缓存,否则沿用当前分组内最近的非空FRUIT值,完全避免跨季节的FRUIT值泄漏。
  3. 最后直接拼接三部分值,就得到你需要的路径格式。

内容的提问来源于stack exchange,提问作者Alexander Gladysh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:24:03