Metodo utilizzato prima del 26 luglio 2019
Rimuovere righe duplicate in un Foglio di Google con Google Apps Script
AGGIORNAMENTO AL METODO DA PARTE DI GOOGLE DOPO IL 26 LUGLIO 2019: Rimuovere righe duplicate in un Foglio di Google con Range.removeDuplicates()
Non sono pochi i casi dove, all'interno di uno Spreadsheet, ci ritroviamo con un elenco di righe e colonne contenenti valori duplicati. I casi più frequenti si manifestano quando si predispongono processi automatizzati che copiano i dati da uno Spreadsheet all'altro o da un singolo foglio all'altro.
Un esempio banale con righe duplicate evidenziate è mostrato in Fig. 1:
La funzione mostrata di seguito rimuove velocemente le righe duplicate all'interno del foglio di calcolo di Google attivo in quel momento:
function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = [];
for (var i in data) {
var row = data[i];
var duplicate = false;
for (var j in newData) {
if (row.join() == newData[j].join()) {
Logger.log(row.join()); // <-- risultato di join()
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
Il risultato, Fig. 2:
La funzione si adatta ad essere modificata per agire su uno Spreadsheet tramite il suo ID o recuperato da un allegato in Gmail o altri casi simili.
Ad ogni modo non sto mostrando niente di nuovo considerando che questo stesso esempio si trova nella documentazione ufficiale di Google (removing duplicates), mi volevo soffermare tuttavia su un metodo utilizzato all'interno della funzione che la documentazione da per scontato ma che a mio avviso vale la pena di approfondire, si tratta del metodo join().
Come si può vedere dal codice della funzione, il metodo join() viene applicato a row e newData che sono due array.
Il suo utilizzo infatti permette di concatenare tutti gli elementi di questi array in una stringa. È un modo rapido e poco pulito (ma efficace) per effettuare un controllo di uguaglianza tra gli elementi degli array.
Essendo applicato a ciascuna riga, quello che confronta ad ogni ciclo è la concatenzazione del contenuto delle 3 colonne tra il vecchio ed il nuovo array che la funzione crea.
Il Logger.log, che ho inserito di proposito affinché si possa prendere visione di ciò che accade, al primo avvio nel caso dell'esempio in questione mostrerebbe quanto segue:
Mario,Rossi,Pisa
Luigi,Bianchi,Lucca
In questo caso si tratta di un confronto tra intere righe, se dovvesse essere necessario basare il confronto su una sola colonna o su un insieme definito di colonne basterà adeguare la condizione di uguaglianza.
Non ci sono commenti
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
scrivi un commento