在Google Sheets中基于单行描述生成结构化座位列
解决方案:Google Sheets 单行座位描述转结构化列表
可以用Google Sheets的数组公式实现自动拆分和座位展开,无需手动逐个处理。假设原始座位描述在F5单元格,按以下操作即可生成目标列:
1. 生成Room和SeatNumber列
在空白单元格(比如A2)输入以下公式:
=ARRAYFORMULA( LET( raw_groups, SPLIT(F5, ", "), rooms, LEFT(raw_groups, FIND("/", raw_groups)-1), seat_info, RIGHT(raw_groups, LEN(raw_groups)-FIND("/", raw_groups)), seat_prefixes, LEFT(seat_info, FIND(" ", seat_info)-1), seat_ranges, MID(seat_info, FIND(" ", seat_info)+1, FIND(" (", seat_info)-FIND(" ", seat_info)-1), start_nums, INDEX(SPLIT(seat_ranges, "-"),,1)*1, end_nums, INDEX(SPLIT(seat_ranges, "-"),,2)*1, seat_counts, end_nums - start_nums + 1, expanded_rooms, FLATTEN(MAP(rooms, seat_counts, LAMBDA(r,c, REPT(r&"|", c)))), expanded_seats, FLATTEN(MAP(seat_prefixes, start_nums, end_nums, LAMBDA(p,s,e, JOIN("|", p&SEQUENCE(e-s+1,1,s))))), SPLIT(expanded_rooms&"|"&expanded_seats, "|") ) )
这个公式会自动完成:
- 拆分F5中逗号分隔的每个座位组
- 提取每个组的房间名称(如TrainingRoom1)
- 解析座位前缀(如E、J)和座位号范围(如17-18)
- 将座位范围展开为单个座位号(如E17、E18)
- 生成一一对应的Room和SeatNumber行
2. 设置Email列
直接在C列对应位置(比如C2)输入空值占位即可,后续可直接填充学员邮箱,或用公式=IF(A2<>"", "", "")保持列结构统一。
公式核心逻辑说明
SPLIT(F5, ", "):把原始字符串拆分成独立的座位组数组LEFT(raw_groups, FIND("/", raw_groups)-1):提取"/"左侧的房间名SEQUENCE(e-s+1,1,s):生成从起始座位到结束座位的连续数字序列MAP+REPT/JOIN:将每个房间和对应座位范围展开为多行数据FLATTEN+SPLIT:把展开后的字符串转换为标准的二维列格式
示例效果
输入F5的内容:
TrainingRoom1/E 17-18 (2) , TrainingRoom1/J 21-24 (4) , TrainingRoom1/F 19-21 (3)
生成的A、B列结果:
| Room | SeatNumber |
|---|---|
| TrainingRoom1 | E17 |
| TrainingRoom1 | E18 |
| TrainingRoom1 | J21 |
| TrainingRoom1 | J22 |
| TrainingRoom1 | J23 |
| TrainingRoom1 | J24 |
| TrainingRoom1 | F19 |
| TrainingRoom1 | F20 |
| TrainingRoom1 | F21 |
内容的提问来源于stack exchange,提问作者UKDataGeek
相关产品推荐
相关产品推荐

