Google应用脚本会根据一列删除重复项

时间:2019-08-04 21:44:27

标签: javascript google-apps-script google-sheets

下面的代码很棒,可以删除重复项,但是有一件我想更改的事情,例如,如果我有A列并且它包含重复值,而B列包含唯一值,则在这种情况下该功能不会删除重复项从A列中删除,因为有些方法将A和B列连接在一起,然后将其删除。

我需要的是仅根据B列是否为唯一值删除基于A列的重复项

这是带有伪数据的样本表 https://docs.google.com/spreadsheets/d/13ViFiwoA_29oo-nz2LUK3CD7DiRqDRTW1blJRE6XHm4/edit?usp=sharing

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for (var i in data) {
    var row = data[i];
    var duplicate = false;
    for (var j in newData) {
      if (row.join() == newData[j].join()) {
        duplicate = true;
      }
    }
    if (!duplicate) {
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

2 个答案:

答案 0 :(得分:2)

  • 您要删除重复的行。

    • 作为示例,您希望实现以下目标。
    • 来自

      aa  123
      bb  12345
      cc  1235
      dd  167
      aa  1234  <--- You want to delete this row
      bb  12  <--- You want to delete this row
      ff  89
      
    • 收件人

      aa  123
      bb  12345
      cc  1235
      dd  167
      ff  89
      

如果我的理解正确,那么如何使用removeDuplicates()?该方法于2019年7月26日添加。我认为使用此方法,您的脚本将变得更加简单。请认为这只是几个答案之一。

修改后的脚本1:

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(1, 1, sheet.getLastRow(), 2); // Column A and B
  range.removeDuplicates([1]);
}

修改后的脚本2:

如果您的脚本被修改,那么下面的修改如何?

从:
if (row.join() == newData[j].join()) {
至:
if (row[0] == newData[j][0]) {

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

答案 1 :(得分:0)

此功能删除A列中重复的行。

function removeDuplicates() {
  var sh=SpreadsheetApp.getActiveSheet();
  var dt=sh.getDataRange().getValues();
  var uA=[];
  var d=0;
  for(var i=0;i<dt.length;i++) {
    if(uA.indexOf(dt[i][0])==-1) {
      uA.push(dt[i][0]);
    }else{
      sh.deleteRow(i+1-d++);
    }
  }
}
相关问题