A 列到 B 列的重复值 - Google Apps 脚本

Posted

技术标签:

【中文标题】A 列到 B 列的重复值 - Google Apps 脚本【英文标题】:Duplicate values on column A to column B - Google Apps Script 【发布时间】:2021-11-17 00:35:46 【问题描述】:

我正在尝试达到以下结果:

因此,如果 A 列有重复值,我想在 B 列上显示这些重复值。这是我迄今为止尝试过的。但是代码只是让 Apple 在 B 列中显示两次。我需要如何更改我的代码以使其按我想要的方式工作?

function findDuplicates() 
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getActiveSheet()
  var lastRow = sheet.getLastRow()
  var data = sheet.getRange(1,1,lastRow).getValues()

  var dataUnique = data.reduce(function (out, item) 
  return out.concat(out.filter(function (comp) 
    return item.toString() != comp.toString();
  ).length ? [] : [item])
  , []);

  var newValues = sheet.getRange(1,2,dataUnique.length).setValues(dataUnique)

这是我运行代码时的结果:

【问题讨论】:

【参考方案1】:

This is a spreadsheet 专门为解决这个问题而创建。它包含以下代码,将从 A 中获取值并在 B 列中输出结果:

function myFunction() 
  var sheet = SpreadsheetApp.getActiveSheet();
  var input = sheet.getRange('A1:A').getValues().filter(e=>e[0]).map(e=>e[0]);
  var inputLower = input.map(e=>e.toLowerCase());

  var output = new Array();
  input.forEach(function (e,i,arr)if(inputLower.indexOf(e.toLowerCase())!=i && output.indexOf(e)==-1)output.push(e));
  sheet.getRange(1,2,output.length,1).setValues(output.map(e=>[e]));

【讨论】:

感谢您的好建议,但我需要使用 Apps 脚本解决此问题 @Tane 我已经根据公式更新了我的答案 -- UNIQUE(FILTER( ... -- 到您要求的 Apps 脚本解决方案。 太棒了!奇迹般有效。非常感谢。 只是出于好奇而询问,是否可以使此解决方案区分大小写,因此“value”和“Value”之类的值将被视为重复?只是问一下,因为我将来可能需要这个:) 添加这个解决了问题: // 将所有字母转换为小写 for (var row = 0; row

以上是关于A 列到 B 列的重复值 - Google Apps 脚本的主要内容,如果未能解决你的问题,请参考以下文章

根据另一列的值过滤数据框列[重复]

合并第二列到最后一列以获取第一列中的重复项

Excel中如何在一个列的所有值前面加个字母

关于我的这个 SQL Server 查询的问题

python pandas:删除A列的重复项,保留B列中具有最高值的行

如何过滤具有列表的列的数据框包含值[重复]