È ansible “pre-compilare” un modulo google utilizzando i dati di un foglio di calcolo di Google?

Sto cercando un modo per “pre compilare” un modulo google con dati specifici da un foglio di calcolo di google. Il modulo avrà le stesse domande “standard” per tutti, ma i dati nelle prime due domande saranno “precompilati” con dati univoci ricavati da un foglio di calcolo google esistente. I dati saranno unici in base al loro indirizzo email nel foglio di calcolo esistente.

FONTE DI DIFFUSIONE FONTE ESEMPIO

Col 1 Col 2 Col 3 email name birthday @mike Mike Jones May 9th 1975 @jim Jim Smith April 19th 1985 

MODULO ESEMPIO UNO

Domanda 1: precompilata con dati (Mike Jones) da un foglio di calcolo di Google.

Domanda 2 – precompilata con dati (9 maggio 1975) da un foglio di calcolo di google.

Domanda 3 – blank (in attesa di risposta dell’utente)

Domanda 4 – blank (in attesa di risposta dell’utente)


MODULO ESEMPIO DUE

Domanda 1: precompilata con dati (Jim Smith) da un foglio di calcolo di Google.

Domanda 2 – precompilata con dati (19 aprile 1985) da un foglio di calcolo di google.

Domanda 3 – blank (in attesa di risposta dell’utente)

Domanda 4 – blank (in attesa di risposta dell’utente)


Qualcuno sa se questo può essere fatto? Se sì, qualsiasi aiuto o direzione sarà apprezzato GRAZIE.

Grazie in anticipo!
Todd

È ansible creare un URL modulo precompilato dall’Editor del modulo, come descritto nella documentazione di Drive Forms . Ti ritroverai con un URL come questo, ad esempio:

 https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=Mike+Jones&entry.787184751=1975-05-09&entry.1381372492&entry.960923899 

buildUrls ()

In questo esempio, la domanda 1, “Nome”, ha un ID di 726721210 , mentre la domanda 2, “Compleanno” è 787184751 . Le domande 3 e 4 sono vuote.

È ansible generare l’URL precompilato adattando quello fornito tramite l’interfaccia utente come modello, ad esempio:

 function buildUrls() { var template = "https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=##Name##&entry.787184751=##Birthday##&entry.1381372492&entry.960923899"; var ss = SpreadsheetApp.getActive().getSheetByName("Sheet1"); // Email, Name, Birthday var data = ss.getDataRange().getValues(); // Skip headers, then build URLs for each row in Sheet1. for (var i = 1; i < data.length; i++ ) { var url = template.replace('##Name##',escape(data[i][1])) .replace('##Birthday##',data[i][2].yyyymmdd()); // see yyyymmdd below Logger.log(url); // You could do something more useful here. } }; 

Questo è abbastanza efficace: puoi inviare via e-mail l'URL pre-compilato a ogni persona, e avrebbero già alcune domande già compilate.

betterBuildUrls ()

Invece di creare il nostro modello usando la forza bruta, possiamo metterlo insieme a livello di programmazione. Ciò avrà il vantaggio di poter riutilizzare il codice senza dover ricordare di cambiare il modello.

Ogni domanda in un modulo è un elemento. Per questo esempio, supponiamo che il modulo abbia solo 4 domande, come le hai descritte. L'elemento [0] è "Nome", [1] è "Compleanno" e così via.

Possiamo creare una risposta al modulo, che non invieremo, ma completeremo parzialmente il modulo, solo per ottenere l'URL del modulo pre-compilato. Poiché l'API Forms comprende i tipi di dati di ciascun elemento, possiamo evitare di manipolare il formato stringa di date e altri tipi, il che semplifica in qualche modo il nostro codice.

( MODIFICA: c'è una versione più generale di questo in Come compilare le caselle di controllo del modulo di Google? )

 /** * Use Form API to generate pre-filled form URLs */ function betterBuildUrls() { var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName("Sheet1"); var data = ss.getDataRange().getValues(); // Data for pre-fill var formUrl = ss.getFormUrl(); // Use form attached to sheet var form = FormApp.openByUrl(formUrl); var items = form.getItems(); // Skip headers, then build URLs for each row in Sheet1. for (var i = 1; i < data.length; i++ ) { // Create a form response object, and prefill it var formResponse = form.createResponse(); // Prefill Name var formItem = items[0].asTextItem(); var response = formItem.createResponse(data[i][1]); formResponse.withItemResponse(response); // Prefill Birthday formItem = items[1].asDateItem(); response = formItem.createResponse(data[i][2]); formResponse.withItemResponse(response); // Get prefilled form URL var url = formResponse.toPrefilledUrl(); Logger.log(url); // You could do something more useful here. } }; 

Funzione yymmdd

Si prevede che qualsiasi elemento della data nell'URL del modulo pre-compilato sia in questo formato: yyyy-mm-dd . Questa funzione di supporto estende l'object Date con un nuovo metodo per gestire la conversione.

Quando leggi date da un foglio di calcolo, ti ritroverai con un object Date javascript, a condizione che il formato dei dati sia riconoscibile come una data. (Il tuo esempio non è riconoscibile, quindi invece del May 9th 1975 puoi usare 5/9/1975 .)

 // From http://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/ Date.prototype.yyyymmdd = function() { var yyyy = this.getFullYear().toString(); var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based var dd = this.getDate().toString(); return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]); };