我有一个很大的电子表格,我只想根据一个列进行重复数据删除,但有一个转折点。
我使用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又称为1)。我怎么能修改我的脚本来解释这个?
答案 0 :(得分: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.
}
对于列b中的值小于列B中给定重复条目的列B中的最大值的任何行,这将设置duplicate = true。
希望有所帮助
编辑之前忽略此错误
在下面的代码中,循环应该遍历数据数组而不是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);
}