JavaScript, HTML, CSS e... !
0 commenti

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:



righe duplicate in uno spreadsheet

Fig. 1 - Righe duplicate in uno Spreadsheet


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:



righe duplicate rimosse da uno spreadsheet

Fig. 2 - Righe duplicate rimosse dal Foglio di Google


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.

Tags

Michele Pisani

Michele Pisani

Sviluppatore Javascript ed esperto in Digital Analytics

L'esperienza nel settore Digital Analytics unita ad anni di sviluppo in Javascript ha trovato la massima espressione in Google Apps Script che mi ha permesso, con estrema facilità e poche righe di codice, di realizzare potenti applicazioni interattive e processi automatizzati integrati con i prodotti della G Suite.

Come contattarmi
scrivi un commento

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

scrivi un commento

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato.I campi contrassegnati da un * sono obbligatori
Puoi utilizzare i seguenti tag nei commenti:
[bold]testo[/bold] se vuoi evidenziare un testo con il grassetto[code]function helloworld() { }[/code] se vuoi pubblicare una porzione di codice[url]https://www.appsscript.it[/url] se devi riferirti ad un indirizzo web