2017-03-15 50 views
0

我有一個很大的電子表格,我想根據一列刪除重複數據,但有一個轉折點。如何在保留具有另一列最高值的行的同時去除重複行?

我使用的this script的變化,那就是:

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

現在我需要去重更加細緻入微,工作,使其保持與另一個最高值的行列(在這種情況下B列a 1)。我怎麼能修改我的腳本來解決這個問題?

回答

0

只需修改if語句如下:

if(row[7] == newData[j][7] && row[1] < newData[j][1]){ 
     duplicate = true; 
     break; //This will stop the loop when a duplicate is found. 
     } 

這將設置重複= TRUE對於其價值在B列大於B列的列給定的重複條目的最大值較小的任何行8.

希望幫助

編輯忽略了這個錯誤以前

在下面的一段代碼,循環應該通過數據陣列,而不是newData陣列(newData陣列將是空的!)

for(j in newData){ 
     if(row[7] == newData[j][7] && row[1] < newData[j][1]){ 
      duplicate = true; 
      break; //This will stop the loop when a duplicate is found. 
      } 
    } 

找到下面的修改後的代碼:

function removeDuplicates() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var data = sheet.getDataRange().getValues(); 
    var newData = new Array(); 
    for(i in data){ 
    var row = data[i]; 
    var duplicate = false; 
    // I replaced all newData to data where appropiate 
    for(j in data){ 
     if(row[7] == data[j][7] && row[1] < data[j][1]){ 
      duplicate = true; 
      break; //This will stop the loop when a duplicate is found. 
      } 
    } 
    if(!duplicate){ 
     newData.push(row); 
    } 
    } 
    sheet.clearContents(); 
    sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData); 
} 
相關問題