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

如何用递归Google Sheets函数将内联标签转换为列?

解决Google表格项目标签行向下填充并重构表格的问题

假设你的原始数据位于A:C列(表头为Projects、Dollars、Hours),可以使用以下公式直接生成目标结构的表格:

=LET(
  data, A2:C,
  project_rows, INDEX(data,,1),
  project_names, IF(LEFT(project_rows,8)="Project: ", TRIM(RIGHT(project_rows, LEN(project_rows)-8)), ""),
  current_project, SCAN("", project_names, LAMBDA(acc, val, IF(val<>"", val, acc))),
  task_rows, FILTER(data, project_names=""),
  tasks, INDEX(task_rows,,1),
  dollars, INDEX(task_rows,,2),
  hours, INDEX(task_rows,,3),
  filtered_projects, FILTER(current_project, project_names=""),
  HSTACK(filtered_projects, tasks, dollars, hours)
)

公式拆解

  1. 提取项目名称:通过LEFT判断行首是否为Project: ,是则截取并去除空格得到项目名,否则留空。
  2. 持续沿用项目名:核心用SCAN函数遍历所有行,遇到新的项目名就更新当前值,没有新项目时保持上一个项目名,实现自动向下填充。
  3. 筛选任务行并重组:用FILTER剔除项目标签行,只保留任务数据,再通过HSTACK将项目名、任务、金额、工时组合成目标表格。

自定义调整

如果你的数据范围不是A2:C,修改公式中data变量对应的单元格范围即可。需要包含表头的话,可在公式最外层添加表头数组:

={"Project","Task","Dollars","Hours";
 LET(
  data, A2:C,
  project_rows, INDEX(data,,1),
  project_names, IF(LEFT(project_rows,8)="Project: ", TRIM(RIGHT(project_rows, LEN(project_rows)-8)), ""),
  current_project, SCAN("", project_names, LAMBDA(acc, val, IF(val<>"", val, acc))),
  task_rows, FILTER(data, project_names=""),
  tasks, INDEX(task_rows,,1),
  dollars, INDEX(task_rows,,2),
  hours, INDEX(task_rows,,3),
  filtered_projects, FILTER(current_project, project_names=""),
  HSTACK(filtered_projects, tasks, dollars, hours)
)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:05:03