如何在Google Sheets中对字符串进行分组聚合?
在Google Sheets中合并共享驱动器成员邮箱的方法
方法一:公式组合快速实现
假设你的原始数据在名为Sheet1的工作表里,列依次是id、name、createdTime、emailAddress:
提取唯一驱动器记录
新建一个工作表,在A2单元格输入:=UNIQUE(Sheet1!A:C)
这会自动生成所有不重复的共享驱动器条目,每个驱动器只出现一次。拼接对应成员邮箱
在D2单元格输入:=TEXTJOIN(", ", TRUE, FILTER(Sheet1!D:D, Sheet1!A:A=A2))TEXTJOIN负责用逗号加空格把邮箱拼起来,TRUE表示跳过空值FILTER会筛选出当前驱动器(A2是id)对应的所有成员邮箱
下拉D列公式,所有驱动器的成员列表就自动生成了。
方法二:Apps Script批量处理(大数据量适用)
如果数据行数很多,公式运行慢,用脚本更高效:
- 打开表格,点「扩展程序」→「Apps Script」
- 删掉默认代码,粘贴下面的脚本:
function mergeDriveMembers() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheet = ss.getSheetByName("Sheet1"); // 改成你的原始数据工作表名 const targetSheet = ss.getSheetByName("合并结果") || ss.insertSheet("合并结果"); const data = sourceSheet.getDataRange().getValues(); const driveMap = new Map(); // 按驱动器ID分组收集邮箱 for (let i = 1; i < data.length; i++) { const [id, name, createdTime, email] = data[i]; if (!driveMap.has(id)) { driveMap.set(id, {name, createdTime, emails: []}); } if (email) driveMap.get(id).emails.push(email); } // 整理输出数据 const output = [["id", "name", "createdTime", "成员邮箱"]]; driveMap.forEach((info, id) => { output.push([id, info.name, info.createdTime, info.emails.join(", ")]); }); // 写入结果 targetSheet.clear(); targetSheet.getRange(1, 1, output.length, output[0].length).setValues(output); SpreadsheetApp.getUi().alert("合并完成!"); }
- 把脚本里的
"Sheet1"改成你实际的原始工作表名称 - 点运行按钮,授权后就能在「合并结果」工作表里看到处理好的数据
内容的提问来源于stack exchange,提问作者Ian Crew
相关产品推荐
相关产品推荐

