google-apps-script - formularios - google form script examples
Formulario Ășnico de Google para varias hojas (1)
Paso 1: Crear formulario
Procedimiento operativo normal: cree su formulario a través de un script o utilizando la interfaz de usuario de formularios. Capture la ID del formulario. Por ejemplo, desde la URL cuando está en el editor:
https://docs.google.com/forms/d/1-AWccGNgdJ7_5Isjer5K816UKNSaUPSlvlkY3dGJ1UQ/edit
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Adjunte una hoja de cálculo para capturar las respuestas. (No vamos a hacer nada más con eso aquí).
Paso 2: Script de cliente
En la hoja de cálculo accesible para el usuario, cree una secuencia de comandos vinculada al contenedor (para que tenga acceso a la IU de la hoja de cálculo). La siguiente secuencia de comandos produce un menú personalizado con una selección que inicia un formulario en una ventana emergente de Ui.
/**
* Uses the Forms service to get a handle on an existing form, then retrieve its published URL.
* Uses the UrlFetch Service to get a copy of the HTML for the form.
* Uses the HtmlService to embed the form''s HTML in a Spreadsheet UI.
* ... which is finally shown using Spreadsheet.show().
*/
function launchForm() {
var formID = ''1-AWccGNgdJ7_5Isjer5K816UKNSaUPSlvlkY3dGJ1UQ'';
var form = FormApp.openById(formID);
var formUrl = form.getPublishedUrl();
var response = UrlFetchApp.fetch(formUrl);
var formHtml = response.getContentText();
var htmlApp = HtmlService
.createHtmlOutput(formHtml)
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle(''Ta Daaa!'')
.setWidth(500)
.setHeight(450);
SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Launch Form",
functionName : "launchForm"
}];
sheet.addMenu("Custom Menu", entries);
};
Manifestación
Esto es lo que verá cuando seleccione "Formulario de lanzamiento" desde el "Menú personalizado". Sin embargo, una pequeña molestia: cuando se envía el formulario, se lleva al usuario a otra ventana o pestaña del navegador. En la hoja de cálculo, la IU permanece abierta y debe cerrarse manualmente. ¡Ese problema desapareció con el sandboxing IFRAME!
EDITAR: Recientemente se introdujeron cambios en los valores predeterminados de la zona de pruebas de ECMA, que requieren que el modo de zona de pruebas se establezca explícitamente en NATIVO para que esta técnica funcione. El código ha sido actualizado.
EDITAR de nuevo: el modo de recinto de seguridad IFRAME más nuevo mantiene toda la experiencia de formulario dentro del cuadro de diálogo.
Debido a las versiones de desarrollo en curso, además de problemas aparentemente insuperables para implementar soluciones de permisos de usuario, debo capturar los datos del formulario vinculados a una hoja que no se expone a los usuarios. En su lugar, deseo iniciar el formulario desde una aplicación de hoja de cálculo separada utilizando un menú personalizado. Sin embargo, a pesar de las exhaustivas búsquedas de Google y del tentador método llamado ''FormApp.openById'', no encuentro la manera de lograrlo.
Sé que estoy fuera de la pista aquí; ¿Alguien podría indicarme el camino de regreso?