Google 脚本删除重复行,保留最近的行
Google script delete duplicate row, leave most recent
我正在使用脚本中的 GmailApp 从 gmail 中抓取工单数据。但是,当工单状态发生变化时,我会收到一封新电子邮件,并且我们会收到一个附加有更新时间戳的新行。
我想搜索重复的票号 (A) 并删除旧的时间戳 (J)。
我遇到的问题是 oldTime 实际上是最新条目,所以没有任何反应。
13007 | B | C | D | E | F | G | H | I | 2/25/2019
13007 | B | C | D | E | F | G | H | I | 2/26/2019
A是票号。 B-I根据机票信息变化。 J 是从电子邮件日期中提取的。
function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = [];
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
//If Column A in the old entry matches Column A in the new entry
if(row[0] == newData[j][0]){
//Pull New Timestamp and Old Timestamp
var newTime = Date.parse(newData[j][9]);
var oldTime = Date.parse(row[9]);
if (newTime>oldTime) duplicate=true; // number is milliseconds in 24 hours
}
}
if(!duplicate){
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
用新行替换旧行
好的,这正在处理我的数据,让我们看看它是否适用于您的数据。
function outWithTheOldInWithTheNew() {
var sh=SpreadsheetApp.getActiveSheet();
var eA=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).getValues();
var tA=sh.getRange(2,1,sh.getLastRow()-1,1).getValues();
var dA=sh.getRange(2,10,sh.getLastRow()-1,10).getValues();
var uA=[];//ticket numbers
var uB=[];//dates
var uC=[];//entire rows
for(var i=0;i<tA.length;i++) {
var idx=uA.indexOf(tA[i][0]);
if(idx==-1) {
uA.push(tA[i][0]);
uB.push(dA[i][0]);
uC.push(eA[i]);
}else if(new Date(dA[i][0]).valueOf() > new Date(uB[idx]).valueOf()) {
uB.splice(idx,1,dA[i][0]);//replace newer dates
uC.splice(idx,1,eA[i]);//replace newer rows
}
}
sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).clearContent();
sh.getRange(2,1,uC.length,uC[0].length).setValues(uC);//newest rows
}
之前的电子表格:
之后的电子表格:
我正在使用脚本中的 GmailApp 从 gmail 中抓取工单数据。但是,当工单状态发生变化时,我会收到一封新电子邮件,并且我们会收到一个附加有更新时间戳的新行。
我想搜索重复的票号 (A) 并删除旧的时间戳 (J)。
我遇到的问题是 oldTime 实际上是最新条目,所以没有任何反应。
13007 | B | C | D | E | F | G | H | I | 2/25/2019
13007 | B | C | D | E | F | G | H | I | 2/26/2019
A是票号。 B-I根据机票信息变化。 J 是从电子邮件日期中提取的。
function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = [];
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
//If Column A in the old entry matches Column A in the new entry
if(row[0] == newData[j][0]){
//Pull New Timestamp and Old Timestamp
var newTime = Date.parse(newData[j][9]);
var oldTime = Date.parse(row[9]);
if (newTime>oldTime) duplicate=true; // number is milliseconds in 24 hours
}
}
if(!duplicate){
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
用新行替换旧行
好的,这正在处理我的数据,让我们看看它是否适用于您的数据。
function outWithTheOldInWithTheNew() {
var sh=SpreadsheetApp.getActiveSheet();
var eA=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).getValues();
var tA=sh.getRange(2,1,sh.getLastRow()-1,1).getValues();
var dA=sh.getRange(2,10,sh.getLastRow()-1,10).getValues();
var uA=[];//ticket numbers
var uB=[];//dates
var uC=[];//entire rows
for(var i=0;i<tA.length;i++) {
var idx=uA.indexOf(tA[i][0]);
if(idx==-1) {
uA.push(tA[i][0]);
uB.push(dA[i][0]);
uC.push(eA[i]);
}else if(new Date(dA[i][0]).valueOf() > new Date(uB[idx]).valueOf()) {
uB.splice(idx,1,dA[i][0]);//replace newer dates
uC.splice(idx,1,eA[i]);//replace newer rows
}
}
sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).clearContent();
sh.getRange(2,1,uC.length,uC[0].length).setValues(uC);//newest rows
}
之前的电子表格:
之后的电子表格: