Spesso ci troviamo con la necessità di produrre rapidamente un form con Google moduli partendo da una serie di domande a risposta multipla.
Inserirne qualcuno può essere non troppo complicato, ma se ne dovessimo inserire qualche decina?
Si possono installare plugin su Google moduli, ma questo sistema talvolta crea confusione e la necessità di apprendere un metodo di lavoro nuovo e limitato ad un solo plugin, sensibile ad aggiornamenti e a modifiche.
Non esiste un sistema automatico predefinito, ma si può costruire utilizzando Google Apps script.
A. Costruisci la pagina su Google fogli
Partiamo da un foglio Google. Questo foglio dovrà essere impostato in maniera standardizzata come nella griglia sotto. possono essere inserite domande a risposta multipla (da 2 a 5 risposte possibili, di cui indicare 1 corretta nella colonna G) e domande a risposta breve aperta, lasciando vuoti gli spazi corrispondenti alla riga della domanda nelle colonne B, C, D, E, F, G.
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Domanda | Risp. 1 | Risp. 2 | Risp. 3 | Risp. 4 | Risp. 5 | Indice risposta |
| 2 | [domanda]* | [opzione 1]* | [opzione 2]* | [opzione 3] | [opzione 4] | [opzione 5] | [risposta corretta: 1, 2, 3, 4, 5]* |
| 3 | [domanda]* | [opzione 1]* | [opzione 2]* | [opzione 3] | [opzione 4] | [opzione 5] | [risposta corretta: 1, 2, 3, 4, 5]* |
| 4 | [domanda aperta]** | ** | ** | ** | ** | ** | ** |
| 5 | … | … |
*. nelle risposte multiple, sono obbligatorie un minimo di 2 risposte; nella colonna G va l’indice della risposta corretta
**. nelle domande aperte, vanno lasciate vuote le colonne da B a G.
B. Inserisci il codice App script su Google Fogli
- Copia il codice sottostante
function creaQuizDinamico() {
var foglio = SpreadsheetApp.getActiveSheet();
var dati = foglio.getDataRange().getValues();
// Crea il modulo e impostalo come Quiz
var modulo = FormApp.create('Quiz Dinamico Automatizzato');
modulo.setIsQuiz(true);
// Ciclo che parte dalla riga 2 (salta l'intestazione)
for (var i = 1; i < dati.length; i++) {
var riga = dati[i];
var testoDomanda = riga[0];
if (!testoDomanda) continue; // Salta righe vuote
// Recupera le opzioni dalle colonne B, C, D, E, F (indici 1, 2, 3, 4, 5)
var opzioniGrezze = [riga[1], riga[2], riga[3], riga[4], riga[5]];
// Filtra solo quelle che contengono testo
var opzioniValide = opzioniGrezze.filter(function(testo) {
return testo !== "" && testo !== null;
});
var indiceCorretta = parseInt(riga[6]); // Colonna G (indice 6)
if (opzioniValide.length > 0) {
// CASO SCELTA MULTIPLA
var item = modulo.addMultipleChoiceItem();
item.setTitle(testoDomanda);
var scelte = [];
for (var j = 0; j < opzioniValide.length; j++) {
// La risposta è corretta se l'indice (j+1) corrisponde alla Colonna G
var eCorretta = (indiceCorretta === (j + 1));
scelte.push(item.createChoice(opzioniValide[j], eCorretta));
}
item.setChoices(scelte)
.setPoints(1); // Assegna 1 punto per risposta corretta
} else {
// CASO RISPOSTA BREVE
var itemBreve = modulo.addTextItem();
itemBreve.setTitle(testoDomanda)
.setPoints(1);
}
}
Logger.log('Modulo creato con successo! URL: ' + modulo.getEditUrl());
// Mostra un messaggio nel foglio di calcolo
SpreadsheetApp.getUi().alert('Modulo creato! Lo trovi nel tuo Google Drive.');
}
- Sul foglio Google con le voci del test, vai su [Estensioni] –> [Apps Script];
- Cancella il contenuto della pagina che vedi ed incolla il codice;
- Clicca sull’icona del dischetto in alto a sinistra 💾 (salva)
C. Esegui lo script
- Nella barra degli strumenti in altro al foglio Google tornare su [Estensioni] à [Apps Script]
- Assicurarsi che il nome della funzione “creaQuizDinamico” sia presente nel menu a tendina
- Clicca sul tasto “▶️ Esegui”.

Nota: la prima volta che lo script viene eseguito può essere richiesto l’accesso all’account da parte di Google fogli. Seguire la procedura per accettare la richiesta

D. Google Moduli
Complimenti, hai creato il modulo. Adesso puoi andare su Google moduli per personalizzarlo ulteriormente e condividerlo
X. Funzione variante, con scelta multipla
Come usarlo si suppone che la tabella parta dalla casella A2 (la prima riga viene lasciata vuota per le intestazioni):
- Risposta Singola su (Scelta Multipla): Nelle colonne da B a F inserisci le risposte (minimo 2). Nella colonna G inserisci un solo numero (es: 2) ad indicare la risposta corretta. Lo script interpreta come Scelta multipla tutte le domande con opzioni e (A) senza alcuna risposta corretta predefinita, oppure (B) con 1 sola risposta corretta predefinita, indicata nella colonna G.
- Risposte Multiple (Caselle di Controllo): Nelle colonne da B a F inserisci le risposte (minimo 2). Nella colonna G inserisci i numeri delle risposte corrette separati dalla virgola, senza spazi (es: 1,3). Lo script vedrà la virgola e imposterà il tipo di domanda su Caselle di controllo, con le risposte corrette già selezionate.
- Risposta Breve: Lascia le colonne dalla B alla G completamente vuote. Lo script interpreta la domanda come Risposta breve.
function creaQuizCaselleControllo() {
var foglio = SpreadsheetApp.getActiveSheet();
var dati = foglio.getDataRange().getValues();
var modulo = FormApp.create('Quiz Checkbox Verificato');
modulo.setIsQuiz(true);
for (var i = 1; i < dati.length; i++) {
var riga = dati[i];
var testoDomanda = riga[0].toString().trim();
if (!testoDomanda) continue;
var opzioniValide = [riga[1], riga[2], riga[3], riga[4], riga[5]].filter(t => t.toString().trim() !== "");
// GESTIONE COLONNA G - Molto aggressiva per evitare errori di formato
var valoreG = riga[6].toString().replace('.', ','); // Trasforma eventuali punti in virgole
var indiciCorretti = valoreG.split(',').map(n => parseInt(n.trim())).filter(n => !isNaN(n));
// Debug: vedrai questi risultati nel log (Visualizza > Log)
Logger.log('Domanda: ' + testoDomanda + ' | Indici trovati: ' + indiciCorretti);
if (opzioniValide.length > 0) {
var item;
// FORZATURA: Se ci sono più indici, DEVE usare Checkbox
if (indiciCorretti.length > 1) {
item = modulo.addCheckboxItem();
Logger.log('Tipo: CASelle DI CONTROLLO');
} else {
item = modulo.addMultipleChoiceItem();
Logger.log('Tipo: SCELTA MULTIPLA');
}
item.setTitle(testoDomanda).setRequired(true);
var scelte = [];
for (var j = 0; j < opzioniValide.length; j++) {
var eCorretta = indiciCorretti.indexOf(j + 1) !== -1;
scelte.push(item.createChoice(opzioniValide[j], eCorretta));
}
item.setChoices(scelte).setPoints(1);
} else {
modulo.addTextItem().setTitle(testoDomanda).setRequired(true).setPoints(1);
}
}
SpreadsheetApp.getUi().alert('Modulo Creato! Se ancora non vedi le checkbox, controlla i Log.');
}
Quindi… BUON TEST!!!
