2015-07-20 97 views
0

我需要这个脚本删除注册表中与注册码相匹配的注册表的注册码。截至目前,如果“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); 
    } 
} 

回答

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. 然后遍历注册表数据并删除匹配的标志行。

希望有所帮助!

+0

我在更改工作表名称后尝试了脚本,但它只删除单元格,并实际删除列中的所有单元格,而不仅仅是与其他单元格匹配的单元格。 – scollins

+0

我不熟悉设置标志值。听起来是一个好主意。我已经搜索过它,但我找不到如何去做的任何例子。 – scollins

+0

我只用简单的数据(一列有注册值)测试了上面的代码。请张贴示例表。也许我可以帮助你。关于Flag,你可以根据匹配将单元格值更新为true或false,并循环遍历该列,并相应地进行更改。 – KRR