L'utilizzo o meno di un trigger installabile fa la differenza
Gestire l'evento onEdit(e) per l'invio automatico delle Email con Google Apps Script
Il trigger onEdit(e) viene eseguito quando un utente modifica un valore in un Foglio Google. Il parametro e passato alla funzione è facoltativo, ad ogni modo è un oggetto evento che contiene informazioni sul contesto che ha causato l'attivazione del trigger.
Uno dei dubbi più comuni legati all'utilizzo di onEdit è quello di un correlato invio di un'email in automatico ad un destinatario. Per fare chiarezza su quando un'email può essere inviata in automatico e quando no faccio descrivo brevemente di seguito le due situazioni:
- Quando si utilizza direttamente onEdit(e) senza un trigger installabile, il parametro e contiene le seguenti informazioni:
{authMode=LIMITED, range=Range, source=Spreadsheet, oldValue=true, user=miamail@gmail.com, value=FALSE}
In questo caso, l'evento non può inviare un'email a causa dei permessi limitati, evidenziati dal parametro "authMode=LIMITED".
Provando infatti ad inviare una mail, con MailApp.sendEmail(...), il Log di Stackdriver mostrerà un ERRORE con dettaglio "Non disponi dell'autorizzazione per chiamare MailApp.sendEmail. Autorizzazioni richieste: https://www.googleapis.com/auth/script.send_mail at onEdit".
- Quando si utilizza onEdit(e) con un trigger installabile di tipo evento "Modifica", il parametro e contiene le seguenti informazioni:
{authMode=FULL, range=Range, oldValue=false, source=Spreadsheet, value=TRUE, user=miamail@gmail.com, triggerUid=123456}
Di seguito un esempio di configurazione del trigger, Fig. 1:
In questo caso, l'evento può inviare un'email in quanto i permessi vengono dati previa richiesta di autorizzazione, evidenziati dal parametro "authMode=FULL".
Per completezza, il resto delle informazioni contenute nel parametro e sono "range", le coordinate della cella modificata recuperabile ad esempio con e.range.getA1Notation(), e "source" il relativo Spreadsheet, il cui identificativo può essere recuperato con e.source.getId().
Oltre altrigger onEdit() può interessarti conoscere il trigger semplice onChange(), te ne parlo nel mio articolo "La Differenza tra i trigger installabili onEdit() e onChange()".
Ciao, vorrei scrivere la data in formato dd/mm/yyyy hh:mm:ss, all'interno di una cella modificata, sfruttando l'output del comando now().
Il problema è che non riesco a trovare la giusta formattazione del comando now() che restituisce un numero grandissimo che penso siano millisecondi dall'origine, ma nella cella formattata per accogliere una data, non ottengo la conversione.
Uso questo codice:
function onEdit(e){
return Date.now();
}
Ciao Lorenzo,
puoi convertire le date nel formato desiderato con il metodo formatDate della Classe Utilities: https://developers.google.com/apps-script/reference/utilities/utilities