【问题标题】:Google app script remove duplicate based on one Column谷歌应用脚​​本基于一列删除重复项
【发布时间】:2019-08-04 21:44:27
【问题描述】:

下面的代码很棒,可以删除重复项,但是我想更改一件事,例如,如果我有 A 列并且它包含重复值,而 B 列包含唯一值,在这种情况下,函数不会删除重复项来自 A 列,因为它如何将 A 列和 B 列连接在一起,然后删除重复项。

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

这是一个带有虚拟数据的样本表 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);
}

【问题讨论】:

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


    【解决方案1】:
    • 您想删除重复的行。

      • 作为示例,您希望实现如下。
      • 来自

        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日添加的。我觉得用这个方法,你的脚本会变得更简单。请认为这只是几个答案之一。

    修改脚本一:

    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”吗?它又小又简单
    • @Mohamed Montaser 感谢您的回复。 removeDuplicates()的方法是上个月添加的。我认为这可能对您的情况有用。所以我用这个来适应你的情况。如果这对您的情况有用,我很高兴。
    • @Mohamed Montaser 我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,我深表歉意。到时候,可以问一下你现在的情况吗?我想学习解决你的问题。
    【解决方案2】:

    此函数删除 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++);
        }
      }
    }
    

    【讨论】:

    • 可能对使用此功能的人有用:如果您想更改它用于重复检测的列;更改这两个 dt[i][0] 实例中的 0
    • 如果他们想更改,欢迎更改
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多