如何修改Google Sheets去重代码,实现基于两列的重复项删除
修改Google Apps Script实现双列重复项删除
原代码仅针对“Receipt Number”列删除重复行,要实现同时匹配“Receipt Number”和“Mobile Number”两列重复才删除,可以按以下方式修改代码:
function removeDuplicates() { var ss = SpreadsheetApp.getActive(); var sh = ss.getSheetByName("Records"); var vA = sh.getDataRange().getValues(); var hA = vA[0]; var hObj = {}; hA.forEach(function(e, i) { hObj[e] = i; }); // 建立表头到列索引的映射 // 存储已出现过的「Receipt Number + Mobile Number」组合 var uniquePairs = []; var deleteCount = 0; for (var i = 0; i < vA.length; i++) { // 获取当前行的两个关键列值 var receiptNum = vA[i][hObj['Receipt Number']]; var mobileNum = vA[i][hObj['Mobile Number']]; // 用特殊字符(比如|)拼接两个值,避免不同组合被误判为重复 var pairKey = receiptNum + "|" + mobileNum; if (uniquePairs.indexOf(pairKey) === -1) { // 组合未出现过,加入数组 uniquePairs.push(pairKey); } else { // 组合已存在,删除当前行(注意删除行后后续行索引偏移,用deleteCount修正) sh.deleteRow(i + 1 - deleteCount); deleteCount++; } } }
关键修改说明:
- 把原代码中存储单个Receipt Number的数组,改成存储两列值的拼接字符串的数组,用
|作为分隔符(可换成数据中不会出现的其他字符),确保不同组合不会被误判。 - 循环中同时提取两列的值,拼接成唯一标识
pairKey,以此判断是否重复。 - 保留原有的删除行索引修正逻辑(
deleteCount变量),避免因删除行导致后续行索引错位。
内容的提问来源于stack exchange,提问作者Miyer
相关产品推荐
相关产品推荐

