Skip to content

Tutto per WordPress, lo sviluppo web — e non solo

👌 Selezione multipla in Google Sheets: script per celle con convalida dei dati

👌 Selezione multipla in Google Sheets: script per celle con convalida dei dati

Un elenco a discesa in Fogli Google è una funzionalità comoda. Si imposta la convalida dati e la cella accetta solo valori provenienti da un intervallo. Ma c'è un limite: si può selezionare un solo elemento. Cosa succede se il tuo lavoro richiede un tag "urgent, budget, design", tre valori in una cella? Con gli strumenti standard non è possibile.

Nella pratica questa esigenza si presenta di continuo: categorizzare le spese, etichettare le attività, elencare i partecipanti. Aprire ogni volta l'editor e aggiungere valori separati da virgole fa perdere tempo. La soluzione è un piccolo script Google Apps Script che aggiunge una barra laterale con caselle di controllo per qualsiasi intervallo di convalida dati.

Di seguito trovi la configurazione passo passo: dalla creazione del file di script fino a un menu "Script" già pronto nel tuo foglio di lavoro. Il codice è stato testato su fogli reali, funziona senza permessi aggiuntivi e non richiede conoscenze di programmazione.

💡 Panoramica rapida:

  • Imposta la convalida dati per una cella in base a un intervallo e scegli di mostrare un avviso invece di rifiutare l'input
  • Crea due file nell'editor di script: multi-select.gs con la logica e dialog.html con l'interfaccia della barra laterale
  • Salva il progetto, aggiorna il foglio di lavoro e la voce di menu Script apparirà
  • Seleziona una cella con convalida dati, esegui lo script e spunta i valori desiderati con le caselle di controllo
  • Clicca su Seleziona e la cella si riempirà con gli elementi selezionati separati da virgole

Step 1: preparare il foglio di lavoro e la convalida dati

Apri il Foglio Google su cui stai lavorando. Seleziona la cella (o l'intervallo) di destinazione e imposta la convalida dati: Dati → Convalida dati. Nel campo "Criteri" seleziona "Elenco da un intervallo" e specifica l'elenco da cui attingere le opzioni.

Punto importante: non attivare "Rifiuta input", perché se lo fai lo script non potrà scrivere nella cella più valori separati da virgole. Mostrare un avviso è sufficiente.

Se non hai un intervallo già pronto, crea un foglio "Riferimenti" a parte ed elenca tutti i valori consentiti in una colonna. Fai riferimento a questo intervallo nella convalida dati.

Step 2: creare Apps Script

Nel menu del foglio di lavoro: Estensioni → Apps Script. Si aprirà l'editor con una scheda vuota e un file vuoto. Per prima cosa creiamo la parte lato server.

Clicca su File → Nuovo → File di script. Chiamalo multi-select.gs e incolla il codice:

1function onOpen(e) {
2 SpreadsheetApp.getUi()
3 .createMenu('Scripts')
4 .addItem('Multi-select for this cell...', 'showDialog')
5 .addToUi();
6}
7
8function showDialog() {
9 var html = HtmlService.createTemplateFromFile('dialog').evaluate();
10 SpreadsheetApp.getUi()
11 .showSidebar(html);
12}
13
14var valid = function() {
15 try {
16 return SpreadsheetApp.getActiveRange()
17 .getDataValidation()
18 .getCriteriaValues()[0]
19 .getValues();
20 } catch(e) {
21 return null;
22 }
23};
24
25function fillCell(e) {
26 var s = [];
27 for (var i in e) {
28 if (i.substr(0, 2) == 'ch') s.push(e[i]);
29 }
30 if (s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', '));
31}

Cosa succede qui: onOpen aggiunge la voce "Selezione multipla per questa cella…" al menu personalizzato del foglio di lavoro. showDialog apre la barra laterale con l'interfaccia HTML. La funzione valid estrae l'elenco dei valori consentiti dalla convalida dati della cella attiva. E fillCell raccoglie le caselle di controllo spuntate e le scrive nella cella separate da virgole.

Nota: i.substr(0, 2) filtra solo i parametri i cui nomi iniziano con ch, questi sono gli identificatori delle caselle di controllo del modulo HTML. Gli altri parametri vengono ignorati.

Clicca su File → Salva (o Ctrl+S). Al primo salvataggio lo script richiederà i permessi, è normale, senza di essi non potrà leggere i dati della cella e mostrare la barra laterale.

Step 3: aggiungere l'interfaccia HTML

Ora creiamo la barra laterale vera e propria. Nello stesso editor: File → Nuovo → File HTML. Chiamalo dialog.html e incolla:

1<div style="font-family: sans-serif;">
2 <? var data = valid(); ?>
3 <form id="form" name="form">
4 <? if (Object.prototype.toString.call(data) === '[object Array]') { ?>
5 <? for (var i = 0; i < data.length; i++) { ?>
6 <? for (var j = 0; j < data[i].length; j++) { ?>
7 <input type="checkbox"
8 id="ch<?= '' + i + j ?>"
9 name="ch<?= '' + i + j ?>"
10 value="<?= data[i][j] ?>">
11 <?= data[i][j] ?><br>
12 <? } ?>
13 <? } ?>
14 <? } else { ?>
15 <p>This cell has no
16 <a href="https://support.google.com/drive/answer/139705?hl=en">Data validation</a>.
17 </p>
18 <? } ?>
19 <input type="button" value="Select"
20 onclick="google.script.run.fillCell(this.parentNode)" />
21 <input type="button" value="Refresh validation"
22 onclick="google.script.run.showDialog()" />
23 </form>
24</div>

La logica è semplice: il tag lato server <? var data = valid(); ?> chiama la funzione valid() dal file GS e ottiene un array di valori consentiti. Se è specificato un intervallo, vengono renderizzate le caselle di controllo, una per ogni valore. Il pulsante Seleziona invia il modulo a fillCell, il pulsante Aggiorna convalida rilegge la convalida dati (comodo quando si passa da una cella all'altra).

Se la cella selezionata non ha convalida dati, il pannello mostrerà un messaggio con un link alla guida di Google.

Salva il file: File → Salva. Entrambi i file (multi-select.gs e dialog.html) devono trovarsi nello stesso progetto.

Step 4: eseguire e utilizzare

Torna al foglio di lavoro e aggiorna la pagina. Dopo un paio di secondi apparirà una nuova voce Script nella barra dei menu, questo è il risultato di onOpen.

Ora il flusso di lavoro:

  • Seleziona una cella qualsiasi che abbia configurata la convalida dati da intervallo.
  • Vai su Script → Selezione multipla per questa cella….
  • Sulla destra si aprirà una barra laterale con un elenco di caselle di controllo, tutti i valori del tuo intervallo di convalida.
  • Spunta gli elementi desiderati e clicca su Seleziona.
  • La cella si riempirà con i valori selezionati separati da virgole: urgent, budget, design.

Non devi chiudere la barra laterale. Ti basta cliccare su un'altra cella (sempre con convalida dati) e cliccare su Aggiorna convalida, l'elenco delle caselle di controllo si aggiornerà per la nuova cella.

Barra laterale script con caselle di controllo per la selezione dei valori

Nello screenshot, il risultato: una cella con convalida dati, una barra laterale con caselle di controllo attive e il menu Script nella barra dei menu. È esattamente così che la soluzione appare in azione.

Step 5: cosa si può migliorare

Lo script di base risolve il compito "selezionare più valori da un elenco a discesa" e per la maggior parte degli scenari è sufficiente. Ma se lavori intensivamente con il foglio di lavoro, ci sono un paio di migliorie:

  • Aggiungere "Seleziona tutto" / "Deseleziona tutto". Due pulsanti nel modulo HTML che spuntano o deselezionano programmaticamente tutte le caselle di controllo. Un paio di righe in JavaScript e risparmi una dozzina di clic su un intervallo ampio.
  • Sostituire la virgola con un altro delimitatore. Nella funzione fillCell, la riga s.join(', ') unisce i valori con una virgola. Se i tuoi dati contengono virgole come parte del valore, sostituisci con ; o |.
  • Aggiornamento automatico al cambio di cella. Invece di cliccare manualmente "Aggiorna convalida", puoi collegare un trigger all'evento di selezione della cella (onSelectionChange), ma questo richiede codice leggermente più complesso e l'installazione manuale del trigger.

Il codice sorgente dello script è un adattamento della soluzione di Alexander Ivanov, pubblicata da Arthur Attwell su GitHub Gist. Lì puoi trovare anche la discussione della community e ulteriori miglioramenti.

Di seguito un video tutorial in inglese, se preferisci guardare piuttosto che leggere:

⁉️🤔 Domande frequenti

Lo script non appare nel menu dopo il salvataggio. Cosa devo fare?

Aggiorna la pagina del foglio di lavoro (F5 o Ctrl+R). Se non funziona, verifica che la funzione si chiami esattamente onOpen (le maiuscole contano) e che non ci siano errori nell'editor di script: Visualizza → Log mostrerà lo stack trace. A volte aiuta chiudere l'editor di script e riaprirlo.

La barra laterale si apre, ma non ci sono caselle di controllo, solo un messaggio sulla convalida dati.

Significa che la cella selezionata non ha una convalida dati da intervallo. Seleziona la cella per cui hai configurato la convalida nello Step 1. Se la convalida è configurata per un intervallo di celle anziché per una sola, assicurati che la cella attiva sia esattamente quella compresa nell'intervallo.

Lo script può essere usato su più fogli in un unico foglio di lavoro?

Sì. Lo script è collegato al contenitore (il foglio di lavoro), non a un foglio specifico. La convalida dati funziona a livello di foglio, configurala sui fogli necessari e la barra laterale rileverà i valori dalla cella attiva indipendentemente dal foglio.

Dopo aver selezionato i valori, la cella mostra un errore "Valore non valido".

Hai attivato "Rifiuta input" nelle impostazioni di convalida dati. Torna su Dati → Convalida dati, seleziona "Mostra avviso" invece di "Rifiuta input". Se i dati sono critici, lascia l'avviso, non blocca la scrittura da parte dello script.

Lo script richiede l'accesso all'account Google, è sicuro?

Sì. I permessi sono necessari per SpreadsheetApp.getActiveRange() (lettura dei dati della cella) e SpreadsheetApp.getUi() (visualizzazione di menu e barra laterale). Lo script funziona solo all'interno del tuo foglio di lavoro e non ha accesso ad altri file su Drive. L'elenco completo dei permessi è visibile nella finestra di autorizzazione.

Quale script di selezione multipla installare nel tuo foglio di lavoro

La soluzione descritta è un framework minimo funzionante. Due file, nessuna libreria esterna, logica chiara. Per il monitoraggio delle spese, l'etichettatura delle attività e qualsiasi scenario in cui devi scrivere più valori da un elenco di riferimento in una cella, è più che sufficiente.

Se lavori molto con Fogli Google, dai un'occhiata alla documentazione di Apps Script. Le potenzialità vanno ben oltre le caselle di controllo: invio automatico di email al cambio di una cella, generazione di documenti da modelli, integrazione con Google Calendar. Inizia con questo script e, chissà, potresti scrivere le tue automazioni personali.