Google Sheets Apps Script多列去重保留最新条目问题求助
问题分析
原脚本的核心问题是使用了removeDuplicates()方法,该方法默认保留重复组中最先出现的条目,而你的需求是保留**最新(最后出现)**的条目,因此会出现最新数据被误删的情况。另外脚本存在嵌套函数的语法错误,需要先修正。
修正后的脚本
function removeDuplicates() { const checkHeaderTitles = ["School Name", "Class Name", "Group Name"]; const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet1"); // 获取所有数据(含表头) const allData = sh.getDataRange().getValues(); const header = allData[0]; // 定位目标列的索引 const columnIndices = checkHeaderTitles.map(title => { const idx = header.indexOf(title); if (idx === -1) throw new Error(`未找到表头:${title}`); return idx; }); // 用对象存储唯一组合的最新行(后续行覆盖前面的) const uniqueRows = {}; // 从第2行开始遍历(跳过表头) for (let i = 1; i < allData.length; i++) { const row = allData[i]; // 生成唯一键:组合三个目标列的值 const key = columnIndices.map(idx => row[idx]).join("|"); // 覆盖存储,最后保留的就是最新的行 uniqueRows[key] = row; } // 构建新的数据:表头 + 去重后的行 const newData = [header, ...Object.values(uniqueRows)]; // 清空原表格内容,写入新数据 sh.clearContents(); sh.getRange(1, 1, newData.length, newData[0].length).setValues(newData); }
关键改进点
- 手动处理去重逻辑:通过遍历数据,用唯一键存储最新行,确保最后出现的条目被保留
- 修复了原脚本中嵌套函数的语法错误
- 避免了
removeDuplicates()方法的默认行为限制,完全自定义保留规则
内容的提问来源于stack exchange,提问作者fauzi
相关产品推荐
相关产品推荐

