⟳ Automazione

Google Apps Script per Fogli Google: automazioni senza server

Automatizzare Fogli Google con Apps Script: leggere e scrivere celle, aggiungere un menu, inviare email e pianificare attivatori a tempo, con esempi.

Chi lavora con Fogli Google ha a disposizione un ambiente di automazione integrato che molti non conoscono: Google Apps Script. È JavaScript eseguito sui server di Google, collegato al proprio account e ai servizi come Gmail, Drive e Calendar. Non serve installare nulla, non serve un computer acceso: lo script gira nel cloud, anche quando avete chiuso il browser.

Aprire l'editor

Da un foglio qualsiasi si sceglie Estensioni > Apps Script. Si apre un editor con un file Codice.gs e una funzione vuota. Questo tipo di script è «associato» al foglio: vive dentro di esso e può accedervi senza indicare identificativi. La prima volta che si esegue una funzione, Google chiede di autorizzare i permessi necessari, per esempio leggere i fogli o inviare email a vostro nome. Leggete con attenzione l'elenco: è il momento in cui capire che cosa lo script potrà fare.

Leggere e scrivere dati

Il servizio principale è SpreadsheetApp. La regola d'oro è leggere e scrivere a blocchi, non cella per cella, perché ogni chiamata ha un costo in tempo.

function totalePerCliente() {
  const foglio = SpreadsheetApp.getActive().getSheetByName("Ordini");
  const dati = foglio.getDataRange().getValues(); // matrice di righe
  const totali = {};
  for (let i = 1; i < dati.length; i++) {      // salta l'intestazione
    const [cliente, , importo] = dati[i];
    totali[cliente] = (totali[cliente] || 0) + importo;
  }
  const righe = Object.entries(totali);
  const out = SpreadsheetApp.getActive().getSheetByName("Riepilogo");
  out.clearContents();
  out.getRange(1, 1, righe.length, 2).setValues(righe);
}

getValues() restituisce una matrice in cui righe e colonne partono da zero, mentre getRange(riga, colonna, ...) conta da uno. Questa doppia convenzione è la fonte di errore più comune, quindi conviene commentarla nel codice.

Aggiungere un menu personalizzato

Uno script è più facile da usare se compare nel foglio come un comando qualsiasi. La funzione speciale onOpen viene eseguita a ogni apertura del file:

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu("Strumenti ufficio")
    .addItem("Aggiorna riepilogo", "totalePerCliente")
    .addToUi();
}

Da quel momento i colleghi trovano la voce nel menu, senza dover aprire l'editor.

Inviare email a partire dal foglio

Un caso tipico: un foglio di scadenze con nome, indirizzo e data, e il desiderio di avvisare chi ha una scadenza imminente.

function avvisaScadenze() {
  const dati = SpreadsheetApp.getActive().getSheetByName("Scadenze")
    .getDataRange().getValues();
  const oggi = new Date();
  const traSetteGiorni = new Date(oggi.getTime() + 7 * 24 * 3600 * 1000);
  dati.slice(1).forEach(([nome, email, scadenza, inviato]) => {
    if (!inviato && scadenza instanceof Date && scadenza <= traSetteGiorni) {
      MailApp.sendEmail(email, "Promemoria scadenza",
        `Gentile ${nome}, le ricordiamo la scadenza del ${scadenza.toLocaleDateString("it-IT")}.`);
    }
  });
}

Nella versione reale conviene anche scrivere nella colonna «inviato» la data dell'invio, così il promemoria non parte due volte. È un principio generale: ogni automazione che produce effetti esterni deve ricordare ciò che ha già fatto.

Pianificare con gli attivatori

Il vero salto di qualità arriva con gli attivatori a tempo. Dall'icona a forma di sveglia nel pannello sinistro dell'editor si crea un attivatore che esegue avvisaScadenze ogni giorno in una fascia oraria scelta. Esistono anche attivatori legati a eventi, per esempio all'invio di un modulo Google collegato al foglio o alla modifica di una cella.

Attivatore Quando parte Esempio d'uso
onOpen All'apertura del foglio Aggiungere un menu
A tempo Ogni ora, giorno, settimana Promemoria, report periodici
Invio modulo A ogni risposta Notifica al responsabile
Modifica Quando un utente cambia una cella Registrare data e autore

Limiti da conoscere

Apps Script è comodo ma non illimitato. Google applica quote giornaliere, per esempio sul numero di email inviabili e sul tempo totale di esecuzione, con valori diversi tra account personali e account Workspace. Esiste anche un limite di durata per ogni singola esecuzione: uno script che elabora decine di migliaia di righe va progettato per lavorare a lotti. Le quote aggiornate sono indicate nella documentazione ufficiale e conviene verificarle prima di affidare allo script un compito critico.

Altro aspetto da considerare: lo script gira con i permessi di chi lo ha autorizzato. Se quella persona lascia l'azienda e il suo account viene disattivato, gli attivatori smettono di funzionare. Nel mio lavoro suggerisco di creare le automazioni importanti con un account di servizio condiviso dell'ufficio, non con un account personale.

Quando preferire altro

Apps Script è ideale per tutto ciò che vive già nell'ecosistema Google. Se i dati sono su file Excel locali o su un gestionale interno, uno script Python sul proprio computer o su un server è spesso più adatto. Se invece servono collegamenti tra molti servizi diversi, una piattaforma no-code può essere più rapida da configurare.

In sintesi

  • Apps Script si apre da Estensioni > Apps Script e gira sui server di Google.
  • Leggete e scrivete i dati a blocchi con getValues() e setValues().
  • onOpen aggiunge menu personalizzati, gli attivatori a tempo pianificano le esecuzioni.
  • Tenete traccia delle azioni già svolte per evitare email doppie.
  • Considerate quote, limiti di durata e l'account con cui lo script è autorizzato.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche