function DeleteDupes(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sht1=ss.getSheetByName('Email List All');
var dd = SpreadsheetApp.openByUrl('noneofyourbusiness')
var sht2=dd.getSheetByName('Sheet1');
var rng1=sht1.getRange('A:A');
var rng2=sht2.getRange('A:A');
// Code changes begin here:
var rng1A=formatRangeValues(rng1);
var rng2A=formatRangeValues(rng2);
// Keep only the emails in `rng1A` that are not in `rng2A`
var filteredEmails = rng1A.filter(function(email){
return this.indexOf(email) === -1;
}, rng2A);
// Remove all emails in `rng1` in preparation of inserting filtered list
rng1.clearContent();
// Protect against an empty `filteredEmails` array
if(filteredEmails.length === 0)
return;
// Convert `filteredEmails` back to a 2D Range
// and insert back into Column A
sht1
.getRange(1, 1, filteredEmails.length)
.setValues(
filteredEmails.map(function(e){
return [e] ;
})
);
}
// Filter out blank elements.
// reduce{concat} flattens the array
function formatRangeValues(range){
return range
.getValues()
.filter(String)
.reduce(function(a,b){
return a.concat(b)
}, []);
}
Это удалит все сообщения электронной почты на sht1, которые находятся на sht2.Он работает, перенося диапазон sht1 в память и преобразовав его в массив значений.Затем он фильтрует значения и вставляет их обратно в sht1.
Существует два основных преимущества манипулирования данными в JavaScript, а не в электронной таблице.Во-первых, это будет быстрее.Чтение и запись в документ электронной таблицы обходятся дорого.Таким образом, мы можем пакетировать их, а не делать их по отдельности.Во-вторых, это безопаснее, поскольку он манипулирует только клетками, о которых идет речьНам не нужно беспокоиться о побочных эффектах (таких как удаление строки, когда когда-нибудь могут быть использованы другие столбцы).