Javascript, HTML, CSS e... !
13 commenti

Crea la tua funzione in Javascript

Funzioni personalizzate in Google Sheets con Google Apps Script

Google Sheet offre di default moltissime funzioni integrate, dalle più banali quali SOMMA (SUM), MEDIA (AVERAGE), CONCATENA (CONCAT), ecc... a quelle un po' più complesse come CERCA.VERT (VLOOKUP). Tuttavia, laddove queste funzioni non bastino a soddisfare le esigenze del momento, ecco che entrano in gioco le funzioni personalizzate.

Per definire una funzione personalizzata basta aprire l'editor di script di Google Apps Script, dal menu 'Strumenti -> Editor di script', dall'interno dello Spreadsheet nel quale ne abbiamo bisogno ed inserire la funzione di nostro interesse.

Ci sono delle regole da seguire per poter definire una funzione personalizzata in uno Spreadsheet:

- il nome della funzione non deve essere uguale a quello di un'altra funzione presente di default;
- il nome della funzione non può terminare con un underscore "_" (questo perchè l'underscore come ultimo carattere di una funzione la definisce come privata);
- la sintassi per la dichiarazione di una funzione deve essere quella classica  function myFunction() e non var myFunction = new Function();
- è possibile utilizzare anche i caratteri in minusclo (a differenza dei nomi delle funzioni integrate di default che sono scritti tutti in maiuscolo).

A scopo esemplificativo mostrerò come creare una funzione personalizzata per la conversione di un valore da gradi Celsius a gradi Fahrenheit.

Il codice da inserire all'interno dell'editor di script è il seguente:

/**
 * Convertitore Gradi Celsius in Gradi Fahrenheit
 *
 * @param {number} temp Il valore della temperatura in gradi Celsius.
 * @return Il valore della temperatura in gradi Fahrenheit
 * @customfunction
 */

function CSTOFH(temp) {
  return temp * 1.8 + 32;
}

La funzione in questione è molto semplice, il suo nome è CSTOFH (che sta per CelSius TO  FaHrenheit) ed accetta in ingresso un valore numerico sul quale effettua l'operazione di conversione dell'unità di misura per poi restituirlo.

Come mostrato nella figura seguente, Fig. 1, la funzione è utilizzabile come qualsiasi altra funzione nativamente integrata (iniziando con = e a seguire il nome della funzione, all'interno della barra delle funzioni).
Il fatto che la funzione venga mostrata all'interno del sistema di autocompletamento e che vengano visualizzati i dettagli della funzione stessa è dovuto alla parte di codice commentata sopra la funzione vera e propria (solitamente i commenti all'interno del codice non hanno effetto lato utente, in questo caso invece giocano un ruolo importante).



funzione personalizzata in spreadsheet con apps script

Fig. 1 - Funzione Personalizzata in Spreadsheet con Google Apps Script


Nel caso dell'esempio in questione il codice della funzione è senza ombra di dubbio banale tuttavia è possibile creare funzioni di ben più elevata complessità che possono eseguire routine complesse, recuperare contenuti in pagine web, inviare mail, ecc...
Un altro esempio di funzione personalizzata per gli Spreadsheet si trova all'interno dell'articolo 'Tracciare in Analytics l'apertura di uno Spreadsheet con una Funzione Custom'.

Per maggiori informazioni e dettagli sulle funzioni personalizzate nei Fogli di Google rimando alla documentazione ufficiale (Custom Functions in Google Sheets).

Un modo alternativo di utilizzare le funzioni personalizzate all'interno di un Google Sheet è quello di eseguirle al click su un bottone, come descritto nell'articolo 'Bottoni che eseguono script in Spreadsheet con Google Apps Script'.

 

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

13 Commenti

  1. domenica 23 settembre 2018 alle ore 17.45 Stefano

    Ciao Michele, sto affacciandomi (con molta inesperienza!) alla tecnologia di Google Drive con la possibilità di integrarla con l'editor script e seguo con molto interesse i tuoi tutorial. Sto predisponendo un modulo per la raccolta di informazioni nella scuola dove insegno. Una volta preparato il modulo, la mia idea era quella di passare il link abbreviato del modulo ai soggetti destinatari. Mi chiedevo se fosse possibile predisporre, all'apertura del modulo, una richiesta di credenziali (username e password) per abilitarne o meno l'accesso, qualora questo link fosse utilizzato da persone non coinvolte.
    Grazie per l'attenzione

    Rispondi a questo commento
    • domenica 23 settembre 2018 alle ore 18.22 Michele PisaniAutore

      Ciao Stefano,
      non esiste una funzionalità nativa che ti permetta di proteggere un Google Form, quello che puoi fare è adottare una soluzione alternativa, che premetto non essere a prova di proiettile, ovvero puoi creare come primo elemento del form un campo richiesta con convalida dati ed impostare una password come risposta in modo che se il dato inserito non è quello giusto non è possibile passare alla parte successiva del modulo.

      Non è completamente solido come metodo in quanto se un utente ha dimestichezza con l'HTML può risalire alla password dal codice sorgente della pagina.

      Trovi il tutorial dettagliato su come 'Proteggere un Google Form con una password in modo programmatico da Apps Script' su al seguente URL: http://www.appsscript.it/tutorial/proteggere-un-google-form-con-una-password-in-modo-programmatico-da-apps-script/.

      Rispondi a questo commento
      • lunedì 24 settembre 2018 alle ore 08.53 Stefano

        Ciao Michele, innanzi tutto ti ringrazio per l'attenzione che mi rivolgi e per la puntualità della tua risposta. Andrò sicuramente ad approfondire l'indicazione che mi dai anche se la vedo poco praticabile, non tanto dalla possibilità di aggirarla con l'html (per i dati che trattiamo, non abbiamo l'esigenza di una "protezione blindata") quanto per il fatto che, da quello che mi scrivi, mi pare di capire che la password di convalida sarebbe uguale per tutti gli utenti (una specie di codice unico per "aprire la sbarra") e questo renderebbe troppo semplice per un utente inviare dati con il nome di altro utente. Comunque vado subito a leggere e ancora...grazie

  2. mercoledì 10 ottobre 2018 alle ore 13.29 MICHELE BULGARI

    ciao Michele, mi servirebbe un aiuto per attivazione di una function al verificarsi di un evento.
    In sostanza, alla data indicata in una cella vorrei che si svolgesse la funzione che ho realizzato.
    Come posso impostarla ?
    grazi

    Rispondi a questo commento
    • mercoledì 10 ottobre 2018 alle ore 21.01 Michele PisaniAutore

      Ciao Michele,
      direi che l'utilizzo di un trigger basato sul tempo è quello che fa al caso tuo.
      Ti basta impostare un trigger che giornalmente attiva una funzione che controlla la data nella cella specificata e se le condizioni sono sono soddisfatte fai eseguire la funzione desiderata.

      Rispondi a questo commento
  3. giovedì 18 ottobre 2018 alle ore 12.01 Marco P.

    Ciao Michele,
    se volessi creare una funzione che mi permetta di inserire un numero svariato di elementi (facoltativi) vedi l'esempio della Somma, come posso fare?
    Grazie

    Rispondi a questo commento
    • giovedì 18 ottobre 2018 alle ore 15.40 Michele PisaniAutore

      Ciao Marco,
      in quel caso quello che viene passato alla funzione è un array dove ogni elemento rappresenta il contenuto delle celle selezionate.

      Rispondi a questo commento
      • venerdì 19 ottobre 2018 alle ore 11.29 Marco P.

        Ciao Michele,
        grazie per la risposta. Potresti cortesemente mettere un esempio?
        Grazie

        • venerdì 19 ottobre 2018 alle ore 22.44 MichelePisaniAutore

          Ciao Marco,
          il codice non è niente di più che un semplice ciclo for su un array:

          function TESTFUNC(range) {
          mio_risultato = '';
          range_len = range.length;
          for (i=0;i<range_len;i++) {
          // ciclo il valore di ogni cella del range con 'range[i]' ed effettuo le dovute operazioni, es:
          mio_risultato = mio_risultato + range[i];
          }
          return mio_risultato;
          }


          Nel caso specifico range rappresenta l'intervallo di celle selezionato, es: A1:C3, se invece l'intervallo è dato da una singola cella allora il formato non sarà un array ma andrà gestito normalmente come nell'esempio dell'articolo.

          Nota: considerando che il valore nella cella viene letto come stringa, se l'operazione da effettuare su tali valori è un calcolo, come può essere una somma, sarà da applicare un parseFloat(range[i]) per convertire il formato in numerico.

  4. lunedì 19 novembre 2018 alle ore 13.28 sergio

    Michele, ciao!...forse è una domanda stupida...ma da uno che non ama Microsoft, è sicuramente comprensibile..come faccio per realizzare la funzione (che quando ero giovane usavo tantissimo...) NAME e il NAME manager di Excel in Google Sheet...
    Tks

    Rispondi a questo 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]http://www.appsscript.it[/url] se devi riferirti ad un indirizzo web