【问题标题】:Removing duplicate rows using Google App Scripts使用 Google App Scripts 删除重复行
【发布时间】:2021-05-08 14:32:32
【问题描述】:

我有一个带有两个标签的 Google 表格,我想检查行并从中删除重复项。但是,两者的要求略有不同。

在选项卡上提交的匹配项上,我将数据从 Google 表单导入到 A:C 列中,其中表单提交的脚本然后从 API 获取数据并填充 D:J,最后,K:M 通过脚本插入了一个自定义公式.数据范围为A2:M

我遇到的问题是 a) 我对这一切都不熟悉,b) 当我尝试删除重复项时(人们可以从表单中提交两次相同的内容)我找到的唯一解决方案复制了所有内容行,删除重复项并再次粘贴唯一行,因此我丢失了公式。

我让脚本检查 B 列(这只是一个 A-Z 的字母)和 C 列(唯一 ID)是否存在重复项,例如,如果第 2 行和第 3 行在 B 列中有“A”,在列中有“123456” C,那么这是重复的。作为参考,这是我的工作:

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

我需要做的是脚本检查基于 B 和 C 列中的数据的重复行并将其删除,但必须保留 K:M 中的公式。要么从 A:J 中删除数据,要么通过其他方法。

此外,我假设我需要确保这仅在“submittedMatches”选项卡上运行,而不是在工作表上的其他选项卡上运行。

【问题讨论】:

    标签: javascript google-apps-script


    【解决方案1】:

    我解决了这个问题。对不起。经过数小时的尝试,您最终寻求帮助时始终如一。

    我在 B 和 C 上设置了条件格式:=countifs($B$1:$B1,$B1,$C$1:$C1,$C1)>1

    我将背景颜色设置为#fefefe,并将字体设置为红色和粗体。然后我添加了以下脚本来检查具有#fefefe 背景的单元格并将它们删除。

    function deleteDuplicateMatches() {
      var spreadsheet = SpreadsheetApp.getActive();
      var sheet = spreadsheet.getSheetByName('submittedMatches');
      
      //Only get range with data (non-empty cells)
      var firstCol = sheet.getDataRange();
    
      //Save data validation rules based on the first row
      var dataValRules = sheet.getRange('A2:M2').getDataValidations();
    
      var maxRow = firstCol.getNumRows();
      for (var row=1; row<=maxRow; row++){
    
        //Delete row with background color of gray #fefefe
        if(sheet.getRange(row,1).getBackground() == "#fefefe"){
    
          sheet.deleteRow(row);
    
          //since current row was deleted adjust current data set
          //this will handle scenarios with succeeding duplicates
          row--;
          maxRow--;
    
          //insert new row at the end and set data validation rules
          sheet.insertRowAfter(maxRow);
          sheet.getRange(maxRow,1,1,13).setDataValidations(dataValRules);
        }
      }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      相关资源
      最近更新 更多