我目前有一列名为JobID的数据。在此列中,每天重复运行的导入中有重复项,并且会在有问题的JobID上获取最新数据,并将其追加到工作表的顶部。
因此,最近的JobID行是我们需要的数据行。
我想知道是否存在可以在工作表上运行的名为“历史记录”的脚本,以查找JobID列,在下面的每一行中搜索重复项并将其删除,从而保留最上面的,最新的JobID行在工作表中。
我知道使用Google表格中的“删除重复项”工具确实很容易删除重复项...但是我很懒,我正尝试尽可能多地自动执行此过程。
我下面的脚本运行没有错误,但是仍然没有满足我的需要。想知道我在哪里错了:
function removeDuplicates() {
//Get current active Spreadsheet
var sheet = SpreadsheetApp.getActive();
var history = sheet.getSheetByName("History");
//Get all values from the spreadsheet's rows
var data = history.getDataRange().getValues();
//Create an array for non-duplicates
var newData = [];
//Iterate through a row's cells
for (var i in data) {
var row = data[i];
var duplicate = false;
for (var j in newData) {
if (row.join() == newData[j].join()) {
duplicate = true;
}
}
//If not a duplicate, put in newData array
if (!duplicate) {
newData.push(row);
}
}
//Delete the old Sheet and insert the newData array
history.clearContents();
history.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
答案 0 :(得分:1)
删除重复的JobID
此功能将使那些最接近列表的顶部。如果您想采用其他方法,请以相反的顺序重新使用列表。
function removeDuplicates() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("History");
var vA=sh.getDataRange().getValues();
var hA=vA[0];
var hObj={};
hA.forEach(function(e,i){hObj[e]=i;});//header title to index
var uA=[];
var d=0;
for(var i=0;i<vA.length;i++) {
if(uA.indexOf(vA[i][hObj['JobID']])==-1) {
uA.push(vA[i][hObj['JobID']]);
}else{
sh.deleteRow(i+1-d++);
}
}
}