scripts script google formularios form example ejemplos docs developer apps google-apps-script google-spreadsheet google-form

google apps script - script - ¿Es posible "rellenar" un formulario de Google con los datos de una hoja de cálculo de Google?



google forms script (1)

Puede crear una URL de formulario precargada desde el Editor de formularios, como se describe en la documentación de Drive Forms . Terminará con una URL como esta, por ejemplo:

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

buildUrls ()

En este ejemplo, la pregunta 1, "Nombre", tiene una ID de 726721210 , mientras que la pregunta 2, "Cumpleaños" es 787184751 . Las preguntas 3 y 4 están en blanco.

Puede generar la URL precargada adaptando la que se proporciona a través de la interfaz de usuario para que sea una plantilla, como esta:

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. } };

Esto es lo suficientemente efectivo: puede enviar por correo electrónico la URL precargada a cada persona, y ellos ya tienen algunas preguntas completadas.

betterBuildUrls ()

En lugar de crear nuestra plantilla utilizando la fuerza bruta, podemos unirla mediante programación. Esto tendrá la ventaja de que podemos reutilizar el código sin necesidad de recordar cambiar la plantilla.

Cada pregunta en un formulario es un elemento. Para este ejemplo, supongamos que el formulario tiene solo 4 preguntas, tal como las ha descrito. El elemento [0] es "Nombre", [1] es "Cumpleaños", y así sucesivamente.

Podemos crear una respuesta de formulario, que no enviaremos; en su lugar, completaremos parcialmente el formulario, solo para obtener la URL de formulario previamente cumplimentada. Como la API de formularios comprende los tipos de datos de cada elemento, podemos evitar manipular el formato de cadena de fechas y otros tipos, lo que simplifica un poco nuestro código.

( EDITAR: ¿ Hay una versión más general de esto en Cómo rellenar las casillas de verificación del formulario de 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. } };

Función yymmdd

Se espera que cualquier elemento de la fecha en la URL del formulario precompuesto esté en este formato: yyyy-mm-dd . Esta función auxiliar amplía el objeto Date con un nuevo método para manejar la conversión.

Al leer las fechas de una hoja de cálculo, terminará con un objeto de fecha de JavaScript, siempre que el formato de los datos sea reconocible como una fecha. (Su ejemplo no es reconocible, por lo tanto, en lugar del May 9th 1975 de May 9th 1975 , puede usar el 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]); };

Estoy buscando una forma de ''rellenar'' un formulario de Google con datos específicos de una hoja de cálculo de google. El formulario tendrá las mismas preguntas "estándar" para todos, pero los datos de las primeras dos preguntas se "completarán" con datos únicos de una hoja de cálculo existente de Google. Los datos serán únicos en función de su dirección de correo electrónico en la hoja de cálculo existente.

EJEMPLO DE HOJA DE CÁLCULO DE FUENTE

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

FORMATO EJEMPLO UNO

Pregunta 1: llena de datos (Mike Jones) de una hoja de cálculo de Google.

Pregunta 2: rellena con datos (9 de mayo de 1975) de una hoja de cálculo de Google.

Pregunta 3: en blanco (esperando la respuesta del usuario)

Pregunta 4 - en blanco (esperando la respuesta del usuario)

FORMATO EJEMPLO DOS

Pregunta 1: rellena con datos (Jim Smith) de una hoja de cálculo de Google.

Pregunta 2: rellenada con datos (19 de abril de 1985) de una hoja de cálculo de Google.

Pregunta 3: en blanco (esperando la respuesta del usuario)

Pregunta 4 - en blanco (esperando la respuesta del usuario)

¿Alguien sabe si esto se puede hacer? Si es así, cualquier ayuda o dirección será GRANMENTE apreciada.

¡Gracias de antemano!
Todd