删除Google电子表格中的重复行

时间:2015-07-20 19:28:58

标签: google-apps-script google-sheets

我需要使用此脚本将匹配的注册码删除行(在注册表中)到取消注册表的注册码。截至目前,如果“sheetR.deleteRow(i);”,此脚本仅删除一行。不在“if(regCodeR === regCodeCR){}”里面。它也不会删除正确的行。

function rD() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetR = ss.getSheetByName("Registration");
  var sheetCR = ss.getSheetByName("Cancel Registration")
  var dataR = sheetR.getDataRange().getValues();
  var dataCR = sheetCR.getDataRange().getValues();
  var headerRow = 1;
  for (var i = 1; i in dataR && i in dataCR; ++i) {
      var rowR = dataR[i];
      var rowCR = dataCR[i];
      var duplicate = false;
      var regCodeR = sheetR.getRange(headerRow + i, 10).getValues();
      var regCodeCR = sheetCR.getRange(headerRow + i, 9).getValues();
          if (rowR[9] === rowCR[8]) {
          duplicate = true;
          }
  }
  if (regCodeR === regCodeCR) {
      sheetR.deleteRow(i);
  }
}

1 个答案:

答案 0 :(得分:0)

我尝试使用包含一个注册号列的简单数据来编写此代码。您可以根据数据修改主工作表范围。另外,请务必更改工作表名称。

尝试并测试了以下代码:

function deleteDup(){
  var mainSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('regis');
  var cancelSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('cancel');
  var mainSheetValues = mainSheet.getRange(2, 1, mainSheet.getLastRow(),1).getValues();
  var cancelSheetValues = cancelSheet.getRange(2, 1, cancelSheet.getLastRow(),1).getValues();
  var k = 0;
  var del = [];
  // Getting the row index of matching values
  for (i = 0; i < cancelSheetValues.length; i++)
  {
    var cancelValue = cancelSheetValues[i][0];
    Logger.log(cancelValue);
    for (j = 0; j < mainSheetValues.length; j++)
    {
      if(mainSheetValues[j][0] == cancelValue){
        del[k] =  j;
        k++;

      }
    }

  }
  del.sort();
  var count =0;
  // deleting the values from the main sheet values array
  for (i = 0; i < k; i++ )
  {
    mainSheetValues.splice((del[i] - count), 1);
    count++;
  }
  var len = mainSheetValues.length;
  // Update the sheet with new values
  mainSheet.getRange(2, 1, mainSheet.getLastRow(),1).clearContent();
  mainSheet.getRange(2, 1, len,1).setValues(mainSheetValues);

}

但你也可以这样做:

  1. 如果注册表中的标记值与取消表匹配,则设置一个标记值。
  2. 然后循环注册表数据并删除匹配的标志行。
  3. 希望有所帮助!