Google Sheets中按Public Team分组玩家的公式/脚本实现需求
Google Sheets 玩家按团队分组解决方案
公式实现
1. 提取唯一团队列表
在新工作表的A2单元格输入公式,自动获取所有不重复的团队名称(假设原数据在「原数据」工作表,B列是团队列):
=UNIQUE(FILTER('原数据'!B:B, '原数据'!B:B<>""))
2. 提取对应团队的玩家
在B2单元格输入公式,然后向右、向下拖拽填充,就能拿到每个团队的第1、2、3...个玩家:
=INDEX(FILTER('原数据'!A:A, '原数据'!B:B=$A2), COLUMN()-1)
- 原理:先筛选出当前团队的所有玩家,再按列号提取对应位置的玩家(
COLUMN()-1是因为B列对应第1个玩家)。
要自动生成「Player 1」这类表头,在B1单元格输入:
="Player "&COLUMN()-1
向右拉到需要的列数即可。
脚本实现(适合大数据量)
如果数据量较大导致公式卡顿,用脚本批量处理更高效:
- 打开表格,点击「扩展程序」→「Apps脚本」;
- 替换代码里的工作表名称,粘贴后保存运行:
function groupPlayersByTeam() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheet = ss.getSheetByName("原数据"); // 改成你的原数据工作表名 const targetSheet = ss.getSheetByName("分组结果"); // 改成你要存结果的工作表名 // 读取原数据(跳过表头) const data = sourceSheet.getDataRange().getValues().slice(1); const teamMap = new Map(); // 按团队分组玩家 data.forEach(row => { const player = row[0].trim(); const team = row[1].trim(); if (!player || !team) return; if (!teamMap.has(team)) teamMap.set(team, []); teamMap.get(team).push(player); }); // 准备输出格式 const output = [["Team", "Player 1", "Player 2", "Player 3", "Player 4", "Player 5"]]; teamMap.forEach((players, team) => { const row = [team]; // 填充玩家到列里,不够的留空 for (let i = 0; i < 5; i++) row.push(players[i] || ""); output.push(row); }); // 写入结果 targetSheet.clear(); targetSheet.getRange(1, 1, output.length, output[0].length).setValues(output); }
- 首次运行需要授权,完成后就能看到分组好的结果。
内容的提问来源于stack exchange,提问作者ash schnoor
相关产品推荐
相关产品推荐

