【问题标题】:Delete duplicate rows and add first column to original row Google script删除重复行并将第一列添加到原始行 Google 脚本
【发布时间】:2016-10-05 15:32:07
【问题描述】:

我一直在尝试在互联网上寻找可以帮助我解决此问题的一段代码或方向。
基本上,我有一组四列的数据,在最新一列中,描述了数据所代表的内容。
我每天都在导入新数据,其中描述可能相同,但给出了一组不同的数据,这些数据只是数字。
现在我希望我的脚本找到重复项,获取数据并将其添加到原始数据中并删除重复项。
因此,我只想累积第一列并删除其余数据。

我知道如何查找重复项、删除整个数据集并将没有重复项的新数据集推送到工作表。
但是,我在网上找不到任何可能性。可能有可能将 var Newdata 中的某个范围的值复制到找到重复项的行,然后将该数组全部推送。
但是,我尝试合并的所有内容都给了我多个错误和无限的计算时间。

我希望有人可以帮助我。

function DuplicateRemoval(){
  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.join() == newData[j].join()){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

【问题讨论】:

    标签: google-apps-script duplicates copy-paste


    【解决方案1】:

    这样的?

    function overwriteWithNew() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var data = sheet.getDataRange().getValues();
      var newData = [];
    
      data.forEach(function(row, rowI) {
        if (!newData.some(function(row2) {return row[0] === row2[0];})) { // If the key is not in the output yet
          for (var row2I = data.length - 1; row2I >= rowI; row2I--) {     // Then, starting from the last column
            if (data[row2I][0] === row[0]) {                              // Find the latest data with the same key
              newData.push(data[row2I]);                                  // Add it to the output
              break;                                                      // And continue with the next row
            }
          }
        }
      });
      sheet.clearContents();
      sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);   
    }
    

    【讨论】:

    • 嗨罗宾,非常感谢。因此,例如,如果我的重复描述在第 5 列中,而我想要求和的数据在第 1 列中,那么在这个脚本中可能吗?看起来这个只检查一列并将同一列加在一起,对吗?
    • 啊,现在我明白了,这也可以用=QUERY(A:E, "SELECT E, SUM(A) WHERE E <> ''GROUP BY E") 来完成,你想改变格式吗?如果不是,第 2-4 列会发生什么?
    • 我刚刚再次更改了我的数据,其中当前 Col C 包含将被复制的描述,而 Col D 和 E 是在存在重复时需要汇总的值。我以前从未使用过 Query,我可以将该查询放在工作表中的任何单元格中吗?谢谢
    • 您能否发布一个示例工作簿来展示您的结构以及您想要实现的目标?
    • 嗨罗宾。我目前在脚本中使用 SUMIF() 公式,将具有相同描述的所有值加在一起,然后让脚本执行重复删除部分。奇迹般有效。感谢您的意见!
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 2015-08-12
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多