Google Sheets跨表提取课程数据:分组分栏优化需求
Google Sheets课程汇总页优化方案
一、实现分组带标题+间隔的提取
先从原数据中提取符合条件的唯一值,再按代码前缀分组,每组添加标题并保留组间间隔,使用以下公式:
=LET( raw_data, UNIQUE(FILTER('Lessons NEW'!$E2:$E1009, (RIGHT(LEFT('Lessons NEW'!$E2:$E1009,5),1)="1")+(LEN('Lessons NEW'!$E2:$E1009)=3))), groups, MAP(raw_data, LAMBDA(x, IF(LEN(x)=3, x, LEFT(x,3)))), unique_groups, SORT(UNIQUE(groups)), result, REDUCE("", unique_groups, LAMBDA(acc, grp, LET( group_items, FILTER(raw_data, groups=grp), acc&CHAR(10)&grp&" 课程组"&CHAR(10)&TEXTJOIN(CHAR(10), TRUE, group_items)&CHAR(10)&CHAR(10) ) )), SPLIT(TRIM(result), CHAR(10)) )
该公式会输出每个组的标题、组内课程代码,组间自动保留两行空行。
二、多列排列且不拆分分组
要将分组内容分放在B列和G列(保证组不拆分),将以下公式放在B1单元格:
=LET( // 提取并分组数据 raw_data, UNIQUE(FILTER('Lessons NEW'!$E2:$E1009, (RIGHT(LEFT('Lessons NEW'!$E2:$E1009,5),1)="1")+(LEN('Lessons NEW'!$E2:$E1009)=3))), groups, MAP(raw_data, LAMBDA(x, IF(LEN(x)=3, x, LEFT(x,3)))), unique_groups, SORT(UNIQUE(groups)), // 生成每个组的完整内容块(标题+项目+空行) group_blocks, MAP(unique_groups, LAMBDA(grp, LET( items, FILTER(raw_data, groups=grp), {grp&" 课程组"; items; ""; ""} ) )), // 拆分分组为左右两部分 total_groups, COUNTA(unique_groups), left_count, ROUNDUP(total_groups/2), right_count, ROUNDDOWN(total_groups/2), // 生成左右列内容 left_content, REDUCE("", SEQUENCE(left_count), LAMBDA(acc, i, VSTACK(acc, INDEX(group_blocks,i)))), right_content, REDUCE("", SEQUENCE(right_count)+left_count, LAMBDA(acc, i, VSTACK(acc, INDEX(group_blocks,i)))), // 对齐左右列并留出中间列间隔 max_rows, MAX(ROWS(left_content), ROWS(right_content)), HSTACK( IFERROR(INDEX(left_content, SEQUENCE(max_rows)), ""), "", "", "", "", // 留出B到G之间的4列间隔 IFERROR(INDEX(right_content, SEQUENCE(max_rows)), "") ) )
公式会自动将前半组放在B列,后半组放在G列,每组完整保留不拆分。
三、设置分组标题加粗
通过条件格式实现标题行加粗:
- 选中B列和G列的所有数据区域
- 点击「格式」→「条件格式」
- 选择「自定义公式」,B列输入:
=REGEXMATCH(B1, "课程组$"),G列输入:=REGEXMATCH(G1, "课程组$") - 在格式设置中勾选「加粗」,确认应用
内容的提问来源于stack exchange,提问作者Michael Lissant-Clayton
相关产品推荐
相关产品推荐

