Google Apps Script: fatelo da casa!

Google Apps Script?

Google Apps Script LogoGoogle Apps Script è un linguaggio di scripting basato su JavaScript che gira nella cloud. Consente in modo semplice di automatizzare task, interfacciandosi alle Google Apps e a servizi di terze parti.

Interessante…cosa posso farci?

Le integrazioni e le attività che si possono realizzare con questo strumento sono tantissime, ma tanto per dare un’idea diciamo che è possibile:

  • Creare funzioni Spreadsheet personalizzate e invocarle come quelle predefinite;
  • Inviare mail e una calendar invitation ad una lista di contatti prelevati da un database MySQL;
  • Creare interfacce grafiche per raccogliere dati da inserire in un documento su Google Docs;
  • Ricercare e aggregare dati prelevendoli da uno spreadsheet al verificarsi di certi eventi (trigger) e inviarli via mail.

Da dove parto per imparare?

La domanda è: “Quanto è facile iniziare a scrivere questi Script?“. E la risposta è: “Google!“. Il colosso della Silicon Valley ci ha ormai abituato che è possibile avere servizi di alta qualità senza spendere un centesimo (mi viene in mente un solo altro esempio di questo, ma non ha molto a che fare col software) e anche in questo caso le cose stanno così. Cominciamo dalla documentazione messa a disposizione del neofita:

Se volessi scrivere il mio primo Script?

Gestione ScriptPresto fatto: apriamo o creiamo un nuovo SpreedSheet su Google Docs; all’interno del menu a tendina Tools vediamo che sono presenti 3 voci relative allo Scripting:

  • Script gallery: in questa sezione possiamo cercare e installare degli Script che sono stati condivisi e messi a disposizione, sia da Google che da altri sviluppatori;
  • Script Manager: in questa sezione possiamo gestire gli Script, previa autorizzazione, richiesta in funzione dei servizi che lo Script stesso va ad utilizzare. Ad esempio l’invio della mail richiede preventiva autorizzazione, che deve però essere data soltanto la prima volta, dopodiché lo Script è lanciabile senza ulteriori passaggi;
  • Script Editor: l’editor dove vengono codificati gli Script utilizzando il linguaggio JavaScript.

JavaScript? Doh!

Se siete come me avrete pensato: “Noooo, JavaScript!”. Ma devo ammettere che basta una fuggevole occhiata allo Script Editor per capire che, quando i duri come Google giocano, il gioco si fa…semplice:


Script Manager

Siamo assistiti dall’autocomplete (CTRL+SPAZIO) e da un efficace debugger; abbiamo diverse combinazioni di tasti che semplificano il lavoro (tante sono quelle di Eclipse); infine le API sono progettate in modo da essere assolutamente intuitive, tanto che Google dichiara che per utilizzare questo scripting tool non è necessario essere programmatori!

Avanti con un esempio

Realizziamo una GUI utilizzando gli UI Services; in questa GUI richiediamo all’utente di inserire un dato che viene riportato in automatico in uno SpreadSheet. Gli UI Services realizzano GUI richiamabili da:

  • Google Sites;
  • Google SpreadSheet, il nostro caso;
  • Direttamente da un URL, previa pubblicazione e autorizzazione.

Tipi di UI Objects

Per realizzare una GUI abbiamo a disposizione due tipi di oggetti:

  1. Widgets: sono i componenti di ogni tipica GUI, quali Text Box, Text Area, Radio Buttons, Check Boxes, Labels, Buttons etc;
  2. Panels: sono dei contenitori che possiamo riempire con Widgets. Ce ne sono di diversi tipi, quali Form Panel, Horizontal Panel, Vertical Panel, Flow Panel etc.

Ecco lo Script

Quindi a partire da uno SpreedSheet precedentemente creato andiamo nel menu Tools -> Script Editor... e digitiamo il codice seguente:


Script Manager

In pratica abbiamo:

  • Creato una nuova applicazione;
  • Creato un nuovo pannello;
  • Riempito il pannello con una Label, un Text Box e un pulsante;
  • Inserito il pannello nella applicazione;
  • Ricavato lo SpreadSheet corrente e gli abbiamo chiesto di visualizzare la GUI.

Se ora clicchiamo sul pulsante Run e ci spostiamo sul tab del browser che contiene lo SpreadSheet vedremo la nostra GUI in tutto il suo splendore:


Script Manager

Adesso dobbiamo agganciare un handler al pulsante, in modo che al click chiami una funzione che reperisca il valore della Text Box e lo inserisca nello SpreadSheet corrente:

function showDialog() {
  var app = UiApp.createApplication().setTitle("CoseNonJaviste Google Script Tutorial");
  
  var panel = app.createVerticalPanel();
  panel.add(app.createLabel("Inserisci il tuo Nome"));
  panel.add(app.createTextBox().setName("nome").setId("nome"));
  var button = app.createButton().setText("Invia");
  
  var handler = app.createServerHandler("onInvia");
  handler.addCallbackElement(panel);
  button.addClickHandler(handler);
    
  panel.add(button);
  app.add(panel);
  
  var doc = SpreadsheetApp.getActive();
  doc.show(app);
}

function onInvia(e)
{
  var app = UiApp.getActiveApplication();
  var nome = e.parameter.nome;
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow() + 1;
  var lastCell = sheet.getRange("A"+lastRow);
  lastCell.setValue(nome);  
}

Come si evince dal codice, che risulta essere molto intuitivo, andiamo a inserire il nome digitato dall’utente nella Text Box in una nuova riga nella colonna A dello SpreadSheet.

Non resta che provare…

Per vedere lo Script realizzato in azione basta lanciarlo e verificare che il comportamento sia quello atteso:


Script in azione

Conclusioni

Lo script è terminato: andiamo in pace, fiduciosi che con questi strumenti e con le loro future release, sicuramente sempre più potenti, la nostra vita sarà probabilmente più…scriptabile!

Alla prossima!

Libri consigliati



Manuele Piastra

Sono uno Scrum Master e Project Manager i cui skill tecnici sono focalizzati al momento sullo sviluppo di applicazioni Java EE su IBM Websphere 7.0 utilizzando JSF (RichFaces), JPA (EclipseLink) ed EJB3. Presso OmniaGroup ricopro il ruolo di Training Manager: seleziono il personale tecnico, mi occupo della sua crescita formativa organizzando Corsi e Workshop sia interni che esterni, molti dei quali hanno visto me come docente. LinkedIn Profile - Google+

  • Ciccio Pasticcio

    Ciao,
    ti posso chiedere una cosa?

    • Ciao, certo, chiedi pure. Puoi postare la domanda qua come commento, oppure inviarci una mail tramite il contact form. A presto e grazie per averci seguito. Manuele

  • niccolò gloazzoTest

    ciao volevo chiedere, ma il parametro “e” nella funzione Function onInvia(e)
    cos’è?
    l’ho visto usato molte volte ma non capisco, altre volte vengono passati altri parametri tipo, num o altri oggetti…mentre altre viene usato appunto “e” che non capisco da dove salta fuori…grazie

  • rem

    ciao, avrei bisogno di una grossa mano d’aiuto! Ho un foglio di lavoro con le date di un intero anno. Vorrei che all’apertura del foglio si visualizzasse la data odierna. Come potrei fare? grazie mille!

  • Pingback: 2012, un anno di CoseNonJaviste :: CoseNonJaviste()

  • Giuseppe Giraudo

    Una risposta sul mio foglio metto in una cella =now() e appare la data poi formattando opportunamente la cella al posto di 19/09/2014 11:30 puoi far apparire ad esempio: venerdì 09 settermre 2014.

    Una domanda é possibile inserire un pulsante che al click mi riordini una determinata zona del foglio ? Sicuramente si, ma qualcuno ha suggerimenti o uno script precotto da offrirmi ? Grazie Pino

  • Roberto Lucchese

    Manuele, il tuo sito e i tuoi articoli sono davvero molto interessante. Io sono un programmatore, ma non riesco a trovare come fare alcune cose. Vorrei creare 1) delle funzioni che fanno conteggi ed evidenziano il testo o la riga con certe condizioni e 2) vorrei avviare queste funzioni in automatico come viene caricato il foglio. Ad esempio vorrei che quando il foglio si apre andasse in automatico all’ultima riga. Come fare?

  • Fabio Sacco

    Ciao Manuele, mi sto affacciando solo ora agli script di google per risolvere qualche piccolo grande problema di gestione dati, ho trovato molto utile questo articolo e il codice contenuto che funziona ancora benissimo. A distanza di anni google lo segnala, in parte, come obsoleto, come lo si potrebbe cambiare per attualizzarlo?

  • Pingback: Google Script debugger Javascript | PFMarro's Weblog()