You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:51:06