2013-09-05 9 views
5

Sono un insegnante di scuola superiore in L.A. cercando di creare un sistema di registrazione del corso utilizzando Apps Script. Ho bisogno del modulo Google che sto utilizzando per questa registrazione:Modifica dinamicamente più opzioni di scelta in Google Form live utilizzando Apps Script

Domanda 1) Aggiorna le scelte disponibili nelle domande a risposta multipla successive sulle nuove pagine in base alle scelte di risposta correnti di uno studente.

Domanda 2) Elimina le scelte dal modulo quando un'opzione a scelta multipla ha raggiunto il suo "limite".

Domanda 1 Esempio) Uno studente si registra per "legatura" in officina 1 e viene portato in una nuova pagina. Lo Script modifica le scelte disponibili su quella nuova pagina in base alla prima scelta dello studente e rimuove "legatura" dall'elenco delle possibili scelte su quella nuova pagina, quindi "l'etichetta" è l'unica opzione rimanente.

Domanda 2 Esempio) Gli studenti possono registrarsi per "legatura" o "etichetta", entrambe le risposte sono inizialmente disponibili nel modulo di Google. 30 studenti prendono il sondaggio, tutti e 30 si iscrivono al workshop "legatura". Lo script Apps fa riferimento al foglio di calcolo delle risposte, realizza che il seminario "legatura" è completo, quindi lo rimuove dall'elenco delle possibili scelte di Google Form. Lo studente 31 va a registrarsi e la sua unica opzione è "etichetta".

Se la mia domanda è già stata fatta e ha risposto (credetemi, ho cercato!) Apprezzerei il reindirizzamento.

risposta

3

Credo che possiamo raggiungere il tuo secondo obiettivo senza troppe difficoltà e modificare il modulo, in base allo stato attuale di risposta.

L'approccio è quello di

  1. Creare la forma e associarlo con un foglio di calcolo di risposta
  2. In questo foglio di calcolo risposta, creare uno script con una funzione (updateForm per esempio)
  3. Bind che funzionano con l'evento onFormSubmit, vedere Using Container-Specific Installable Triggers.
  4. analizzare la risposta nella funzione updateForm e modificare il modulo utilizzando il servizio

Modulo Per esempio

function updateForm(e) { 
    if (e.values[1] == 'Yes') { 
    Logger.log('Yes'); 
    var existingForm = FormApp.openById('1jYHXD0TBYoKoRUI1mhY4j....yLWGE2vAm_Ux7Twk61c'); 
    Logger.log(existingForm); 
    var item = existingForm.addMultipleChoiceItem(); 
    item.setTitle('Do you prefer cats or dogs?') 
    .setChoices([ 
     item.createChoice('Cats'), 
     item.createChoice('Dogs') 
     ]) 
    .showOtherOption(true); 
    } 
} 

Quando si tratta di raggiungere l'obiettivo della tua prima domanda, la sua più delicata, come il modulo non verrà inviato a metà strada. Ciò che è possibile è andare su pagine diverse in base alle diverse risposte a una domanda a scelta multipla, il tuo caso d'uso può adattarsi a questo metodo, sebbene non sia molto dinamico.

Inoltre è possibile utilizzare il servizio html per creare un'esperienza completamente dinamica.

Fatemi sapere se avete bisogno di ulteriori informazioni.

+0

L'aggiornamento delle opzioni onSubmit non garantisce il mantenimento del limite ma potrebbe essere sufficiente per alcuni casi. –

2

Non è possibile creare questo tipo di modulo dinamico utilizzando il servizio Google Forms, perché non vi è alcuna interazione tra il servizio e gli script durante l'immissione del modulo, ad eccezione del Modulo di invio. Nel caso di un modulo a più pagine, uno script non ha modo di sapere che uno studente ha completato una pagina e se ne è passato a un altro.

Tuttavia, è possibile ottenere ciò utilizzando HtmlService o UiService.In entrambi i casi, ci si può affidare al modulo lato client che interagisce attraverso gli script sul lato server per ottenere elenchi aggiornati delle opzioni del corso, quindi modificare la "pagina" successiva. Sarà complesso.

0

L'altra risposta a questa domanda continuerà ad aggiungere una selezione multichoice ogni volta che il modulo viene inviato. Utilizzando approccio simile:

  1. Creare la forma e associarlo a un foglio di calcolo di risposta
  2. In questo foglio di calcolo risposta, creare uno script con una funzione (updateForm per esempio)
  3. Bind che funziona con il evento onFormSubmit, vedere Uso di trigger installabili specifici del contenitore.
  4. analizzare la risposta nella funzione updateForm e modificare il modulo utilizzando il servizio Modulo

Ho usato il seguente codice per modificare un elenco di selezione che potrebbe essere easiliy modificato per una scelta multipla.

function updateForm(){ 
    var form = FormApp.openById('YOUR_FORM_ID'); // Base form 
    // need to read what dates are available and which are taken 
    var doc = SpreadsheetApp.getActiveSpreadsheet(); 
    var dates = doc.getRange("dates!A1:A10").getValues(); //available options 
    var taken_dates = doc.getRange("responses!F2:F51").getValues(); //just getting first 50 responses 
    // joining the taken dates into one string instead of an array to compare easier 
    var taken_dates_string = taken_dates.join("|"); 

    var choice = []; 
    // loop through our available dates 
    for (d in dates){ 
    // test if date still available 
    if (dates[d][0] != "" && taken_dates_string.indexOf(dates[d][0]) === -1){ 
     choice.push(dates[d][0]); // if so we add to temp array 
    } 
    } 
    var formItems = form.getItems(FormApp.ItemType.LIST); // our form list items 
    // assumption that first select list is the one you want to change 
    // and we just rewrite all the options to ones that are free 
    formItems[0].asListItem().setChoiceValues(choice); 
} 
Problemi correlati