为重复行添加单元格值

时间:2017-11-24 16:37:14

标签: google-apps-script google-sheets

我创建了一个删除Google表格中重复行的脚本:

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

现在我想修改它以不删除重复的行,而是在两行/单元格中检测到的重复项的开头添加“DUPLICATE:”(脚本只扫描第2列(B))并将它们着色为橙色但我不明白该怎么做。

1 个答案:

答案 0 :(得分:2)

你仍然需要一个双循环,但没有必要拥有newData数组; data数组可以就地修改。如果B列中有两行匹配,则两列中的两列都会得到“Duplicate”。for循环中的显式边界可以很容易地避免将行与自身进行比较。

var data = sheet.getDataRange().getValues();
for (i = 0; i < data.length; i++) {
  for (j = 0; j < i; j++) {
    if (data[i][1] == data[j][1]) {
      data[i][0] = "Duplicate";
      data[j][0] = "Duplicate";
    }
}
sheet.clearContents();
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);

顺便说一句,这个逻辑可以在没有脚本的情况下实现,使用Google表格公式,例如

=if(countif(B:B, B2) > 1, "Duplicate", )

(将其置于A2中,并向下复制到列中)

或者,作为A2中的数组公式:

=arrayformula(if(countif(B:B2, B:B2) > 1, "Duplicate", ))