Este código elimina el duplicado en el nombre de la columna llamado "Número de recibo"
Cómo modificar este código si las condiciones coinciden con dos columnas como duplicado. (es decir, la columna del número de recibo y la columna del número de móvil deben duplicarse al mismo tiempo)
function removeDuplicates() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("Records");
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['Receipt Number']])==-1) {
uA.push(vA[i][hObj['Receipt Number']]);
}else{
sh.deleteRow(i+1-d++);
}
}
}
Gracias por adelantado.
Creo que su objetivo es el siguiente.
Desea eliminar las filas duplicadas utilizando la condición de 2 columnas.
Por ejemplo, cuando las columnas de Número de Receipt Number de Mobile Number son las siguientes, desea eliminar las siguientes 2 filas (4 y 5).
1 Receipt Number Mobile Number
2 a2 b2
3 a3 b3
4 a2 b2 <--- delete
5 a3 b3 <--- delete
6 a2 b3
7 a3 b2
Si mi comprensión es correcta, ¿qué tal la siguiente modificación? En esta modificación, se usa removeDuplicates .
function removeDuplicates() {
var checkHeadeTitles = ["Receipt Number", "Mobile Number"]; // This header titles are from your question.
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName("Records");
var header = sh.getRange(1, 1, 1, sh.getLastColumn()).getValues()[0];
var columnNumber = checkHeadeTitles.map(e => {
var idx = header.indexOf(e);
if (idx == -1) {
throw new Error(`No header tilte of '${e}'.`);
}
return idx + 1;
});
sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).removeDuplicates(columnNumber);
var row = sh.getDataRange().getValues().findIndex(r => r.join("") == "");
if (row == -1) return;
sh.deleteRow(row + 1);
}
function removeDuplicates() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName("Records");
var [hA, ...vA] = sh.getDataRange().getValues();
var idx = {};
hA.forEach(function (e, i) { idx[e] = i; });
var uA = [];
var d = 0;
for (var i = 0; i < vA.length; i++) {
let x = `${vA[i][idx['Receipt Number']]}-${vA[i][idx['Receipt Number']]}`
if (!~uA.indexOf(x)) {
uA.push(x);
} else {
sh.deleteRow(i + 2 - d++);
}
}
}