Hay veces que queremos que una encuesta se pueda contestar en un determinado plazo de tiempo, pero no recibir respuestas ni antes ni después. Esto lo podemos configurar manualmente en cada formulario.
Pero, en un sistema de reclamaciones de exámenes, me pidieron que se abriese o cerrase el formulario varias veces, dependiendo de un calendario específico para cada una de una lista de asignaturas.
Un bonito reto para hacerlo con código.
Supuse que el mejor sitio para escribir el código era el propio formulario. Fué bastante sencillo y rápido, ya qu enseguida encontré el método "setAcceptingResponses(true)" que es el que nos permite, cambiando entre "true" y "false" aceptar o no respuestas. Peeeero, la lógica es que corriese el código todo los días para comparar la fecha con la de abrir o cerrar según cada asignatura y, por desgracia, los activadores de un formulario se limitan a "abrir" (abrir el formulario en modo edición) o "al enviar el formulario" (momento poco adecuado para abrir o cerrar las respuestas)
Superada la fustración, pensé en hacerlo desde la hoja de cálculo de respuestas, ya que estas tienen bastantes más activadores y, sobre todo, el de "cada día" a una hora concreta.
Este es el código:
function puerta() {
// Enlazamos a la hoja de cálculo
var aplicacion = SpreadsheetApp.getActiveSpreadsheet()
// Enlazamos a la pestaña donde se recogen las respuestas del formulario en cuestión
// Esta hoja de cálculo tiene mas formularios, por lo que es imprescindible enlazar a la pestaña que está unida al formulario que queremos
var reclamaciones = aplicacion.getRangeByName('reclamaciones').getSheet()
//Desde la pestaña conseguimos la URL del formulario
var formulario = reclamaciones.getFormUrl()
// Y gracias a la clase FormApp lo abrimos
var formu =FormApp.openByUrl(formulario)
// Para abrir o cerrar necesitamos la fecha de HOY para compararla con las fechas de abrir o cerrar
var hoy = new Date();
// Pero he tenido problemas con new Date() ya que recoge también la hora y así no se puede comparar
// Por lo que he extraído solamente la fecha
var dd = hoy.getDate();
var mm = hoy.getMonth()+1;
var yyyy = hoy.getFullYear();
hoy = dd+'/'+mm+'/'+yyyy;
// En la pestaña de configuración (donde está el intervalo con nombre "config" tenemos las fechas de apertura y cierre en 11 líneas diferentes
var configuracion = aplicacion.getRangeByName('config').getSheet()
var fechas_apertura = configuracion.getRange('b17:b27').getValues()
var fechas_cierre = configuracion.getRange('d17:d27').getValues()
// Creamos un bucle para recorrer todas las fechas de apertura
for (fecha in fechas_apertura){
var esta_fecha = fechas_apertura[fecha]
// Y vemos si hoy es igual al día que hay que abrir
if (esta_fecha==hoy){
// En caso afirmativo ponemos en true aceptar respuestas en el formulario
var control = formu.setAcceptingResponses(true)
}
}
// Creamos un segundo bucle con las fechas de cierre
for (fecha2 in fechas_cierre){
var esta_fecha2 = fechas_cierre[fecha2]
// Y vemos si hoy es igual al día que hay que cerrar
if (esta_fecha2==hoy){
// En caso afirmativo ponemos en false aceptar respuestas en el formulario, osea cerramos
var control = formu.setAcceptingResponses(false)
}
}
}
Me costó encontrar como acceder desde la hoja de cálculo a la configuración del formulario. Al final descubrí que es gracias a la clase FormApp con el dato de getFormUrl() de esta forma:
var formulario = reclamaciones.getFormUrl()
var formu =FormApp.openByUrl(formulario)
Pero, también estaba la cuestión de conseguir elegir uno de los varios formularios que tenía la hoja de cálculo. Y aquí el truco es hacerlo desde la pestaña que recoge las respuetas de cada uno de los formularios. En este caso aplicacion.reclamaciones.getFormUrl(), siendo "reclamaciones" la pestaña en cuestión.
Para que funcione necesitamos ir a "Activadores del proyecto activo" y configurarlo con "Basado en el tiempo", "Temporizador por día", "la hora que os parezca bien"
Suscribirse a:
Enviar comentarios (Atom)
Crear PDF horizontal
El código que vamos a mostrar aquí no ha sido creado por nosotros, sino que lo hemos encontrado en Internet. Objetivo: Publicar una pesta...
-
La fórmula importrange es muy potente, ya que nos permite unir datos de diferentes hojas de cálculo y, con un poco de imaginación, ofrecer ...
-
Este artículo tiene como objetivo mostrar el código básico para trabajar con Drive, es decir, para recorrer todos los archivos y subcarpetas...
-
El código que vamos a mostrar aquí no ha sido creado por nosotros, sino que lo hemos encontrado en Internet. Objetivo: Publicar una pesta...
No hay comentarios:
Publicar un comentario