Google Sheets 脚本:如何去重时仅删除较早的旧重复条目
Google表格追加数据后的去重需求说明
现有场景与配置
- 数据来源:从第三方数据源拉取的Google表格,每日新数据直接追加到同一工作表中
- 已配置
onChange触发器运行去重脚本,当前脚本代码为:
function removeDuplicates() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var range = sheet.getRange("A:Z"); range.removeDuplicates([1,2]); }
- 字段定义:A列为日期,B列为姓名,脚本当前以这两列的组合值作为去重判断依据
当前脚本存在的问题
Google Sheets 原生的range.removeDuplicates()方法遵循固定扫描逻辑:按从上到下的行顺序逐行遍历,遇到重复键值时,保留首次出现的行,删除后续出现的重复行。
由于你的新数据是通过追加方式写入的(新数据永远位于表格靠下的位置),运行现有脚本时会完全反向命中重复规则:新追加在末尾的重复条目会被误删,反而保留位置更靠上的较早重复条目。
新数据追加后的全量表现样例
| 姓名 | 日期 | 数值 |
|---|---|---|
| John | 3-Feb-21 | 100 |
| Tom | 3-Feb-21 | 200 |
| Sam | 3-Feb-21 | 300 |
| John | 4-Feb-21 | 100 |
| Tom | 4-Feb-21 | 200 |
| Sam | 4-Feb-21 | 300 |
| Tom | 4-Feb-21 | 201 |
| Sam | 4-Feb-21 | 301 |
注:表格最后两行为当日新追加的条目
当前脚本无法正确清理的较早重复条目
运行现有脚本后,本该被删除的较早重复条目会被保留在表格中,具体条目如下:
| 姓名 | 日期 | 数值 |
|---|---|---|
| Tom | 4-Feb-21 | 200 |
| Sam | 4-Feb-21 | 300 |
实际去重需求
需要调整脚本逻辑,使得在判断到重复条目时,仅删除位置更靠上的较早重复条目,保留最靠下的最新条目。
期望的最终去重结果
| 姓名 | 日期 | 数值 |
|---|---|---|
| John | 3-Feb-21 | 100 |
| Tom | 3-Feb-21 | 200 |
| Sam | 3-Feb-21 | 300 |
| John | 4-Feb-21 | 100 |
| Tom | 4-Feb-21 | 201 |
| Sam | 4-Feb-21 | 301 |
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

