如何将Google Form响应转换为指定用户的结构化行数据?
解决Google Form响应转结构化游戏状态表格的问题
完整动态函数方案
假设你的FormResponses表结构为:
- A列:Timestamp
- B列:Username
- C列及以后:各游戏的复选框列(列标题为游戏名,单元格值为选中的选项,如
Beat Game, Would Recommend、Beat Game或空值)
在目标表格的A1单元格输入要查询的用户名,然后在任意空白单元格(比如A2)输入以下函数,即可自动生成结构化表格:
=LET( target_user, $A$1, game_headers, FormResponses!C1:1, user_game_data, FILTER(FormResponses!C:ZZ, FormResponses!B:B = target_user), game_list, TRANSPOSE(game_headers), beat_status, BYROW(game_list, LAMBDA(game, IF(ISNUMBER(SEARCH("Beat Game", INDEX(user_game_data, 1, MATCH(game, game_headers, 0)))), "X", "_"))), recommend_status, BYROW(game_list, LAMBDA(game, IF(ISNUMBER(SEARCH("Would Recommend", INDEX(user_game_data, 1, MATCH(game, game_headers, 0)))), "X", "_"))), VSTACK({"Game", "Beat Game", "Would Recommend"}, HSTACK(game_list, beat_status, recommend_status)) )
函数说明
target_user:绑定A1单元格的目标用户名,无需硬编码game_headers:自动获取所有游戏的列标题,新增/删除游戏列会自动同步user_game_data:筛选出目标用户对应的所有游戏响应数据game_list:将游戏标题转置为行,作为结构化表格的第一列beat_status/recommend_status:遍历每个游戏,检查用户是否选中对应选项,用X表示选中,_表示未选中VSTACK+HSTACK:组合表头和数据,生成完整的结构化表格
替代分步方案(适合不熟悉LET函数的场景)
如果你的Google Sheets版本不支持LET,可以分步骤实现:
- 生成游戏列表(A2单元格):
=TRANSPOSE(FormResponses!C1:1) - Beat Game列(B2单元格,下拉填充):
=IF(ISNUMBER(SEARCH("Beat Game", INDEX(FormResponses!C:ZZ, MATCH($A$1, FormResponses!B:B, 0), MATCH(A2, FormResponses!C1:1, 0)))), "X", "_") - Would Recommend列(C2单元格,下拉填充):
=IF(ISNUMBER(SEARCH("Would Recommend", INDEX(FormResponses!C:ZZ, MATCH($A$1, FormResponses!B:B, 0), MATCH(A2, FormResponses!C1:1, 0)))), "X", "_")
对原思路的补充
你之前用TRANSPOSE+SPLIT+REGEXEXTRACT的方向是可行的,但用FILTER+INDEX+MATCH结合BYROW的方式更简洁易维护,避免了复杂的字符串拼接与正则拆分,同时完全满足「无需硬编码、避免自定义脚本」的需求。
内容的提问来源于stack exchange,提问作者endorphins
相关产品推荐
相关产品推荐

