2015-07-20 94 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