使用Google Apps Script提取Google表格A列重复值到B列的代码修改问题
解决方案
你的现有代码逻辑存在偏差:当前reduce逻辑实现的是提取A列所有不重复值,并非你需要的「出现次数≥2的重复值」,因此运行结果不符合预期。
你可以参考下面修改后的代码:
function findDuplicates() { var ss = SpreadsheetApp.getActiveSpreadsheet() var sheet = ss.getActiveSheet() var lastRow = sheet.getLastRow() // 读取A列数据,拍平为一维数组方便统计 var data = sheet.getRange(1,1,lastRow).getValues().flat() // 第一步:统计每个值的出现次数 var countMap = {} data.forEach(item => { const key = item.toString() countMap[key] = (countMap[key] || 0) + 1 }) // 第二步:筛选出出现次数≥2的重复值,转回二维数组适配setValues要求 var duplicateValues = [] for (let key in countMap) { if (countMap[key] >= 2) { duplicateValues.push([key]) } } // 写入B列前先清空原有B列数据,避免残留旧内容 sheet.getRange(1,2,lastRow).clearContent() if (duplicateValues.length > 0) { sheet.getRange(1,2,duplicateValues.length).setValues(duplicateValues) } }
修改说明
- 先用对象统计每个值的出现次数,避免原逻辑中误把所有唯一值都输出的问题
- 新增写入前清空B列的逻辑,避免旧数据干扰
- 适配Google Apps Script的
setValues要求的二维数组格式,运行更稳定
内容的提问来源于stack exchange,提问作者Tane
相关产品推荐
相关产品推荐

