Configura el inicio y cierre del formulario por fechas o limita el número de respuestas admitidas
Los formularios de Google están siempre abiertos por defecto, cualquier usuario puede contestarlos a no ser que los cerremos nosotros de forma manual para no recibir más respuestas.
Por la razón que sea, nos puede interesar que el formulario tenga fechas de apertura y cierre, esto puede ser útil, por ejemplo, para profesores que quieran hacer un examen con fechas límite o bien para establecer en una web un concurso para las primeras 20 respuestas a unas preguntas.
Establecer las fechas a nuestro formulario de Google
Con la ayuda de las Secuencias de Comandos podemos establecer de forma automática las fechas y horarios de apertura y cierre. Con este script también podemos establecer el límite de las respuestas de cualquier formulario.
Estos son los pasos que hay que seguir:
① Abrir un formulario en Google Drive o crear uno nuevo.
② Ir a la sección Más de nuestro formulario; son los tres puntitos verticales de la parte superior derecha de la página.
③ Una vez que se nos abre el Editor de la Secuencia de Comandos, hay que borrar las líneas de código que hay y pegar el script que pongo al final del artículo.
④ Sólo hay que configurar las tres primeras líneas, las dos primeras se refieren a la fecha de inicio y cierre, están en formato inglés YYYY-MM-DD HH:MM, tener esto en cuenta. Si no se quieren poner fechas, se puede dejar en blanco.
⑤ La tercera línea es para establecer el límite de las respuestas, se puede dejar en blanco para que no tenga límites.
⑥ Una vez hecho esto hay que guardar el formulario, Ctrl S o con el icono correspondiente del Editor de Comandos e inicializar el script, para hacerlo seleccionamos la función del desplegable y luego hacemos clic en el icono de play.
Una vez hecho Google preguntará si le damos permisos para que se ejecute el script, hay que seleccionar nuestra cuenta y aceptar.
El script corre en segundo plano, recibiremos un correo cada vez que se abra o cierre el formulario.
FORM_OPEN_DATE = "2018-03-31 12:10"; /* Establece la hora en que se abre el formulario */
FORM_CLOSE_DATE = "2018-03-31 12:30"; /* Establece la hora en que se cierra el formulario */
RESPONSE_COUNT = "100"; /* Establece el número de respuestas que admite el formulario */
/* Web tutorial: http://labnol.org/?p=20707 */
/* Initialize the form, setup time based triggers */
function Initialize() {
deleteTriggers_();
if ((FORM_OPEN_DATE !== "") &&
((new Date()).getTime() < parseDate_(FORM_OPEN_DATE).getTime())) {
closeForm();
ScriptApp.newTrigger("openForm")
.timeBased()
.at(parseDate_(FORM_OPEN_DATE))
.create();
}
if (FORM_CLOSE_DATE !== "") {
ScriptApp.newTrigger("closeForm")
.timeBased()
.at(parseDate_(FORM_CLOSE_DATE))
.create();
}
if (RESPONSE_COUNT !== "") {
ScriptApp.newTrigger("checkLimit")
.forForm(FormApp.getActiveForm())
.onFormSubmit()
.create();
}
}
/* Delete all existing Script Triggers */
function deleteTriggers_() {
var triggers = ScriptApp.getProjectTriggers();
for (var i in triggers) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
/* Send a mail to the form owner when the form status changes */
function informUser_(subject) {
var formURL = FormApp.getActiveForm().getPublishedUrl();
MailApp.sendEmail(Session.getActiveUser().getEmail(), subject, formURL);
}
/* Allow Google Form to Accept Responses */
function openForm() {
var form = FormApp.getActiveForm();
form.setAcceptingResponses(true);
informUser_("Your Google Form is now accepting responses");
}
/* Close the Google Form, Stop Accepting Reponses */
function closeForm() {
var form = FormApp.getActiveForm();
form.setAcceptingResponses(false);
deleteTriggers_();
informUser_("Your Google Form is no longer accepting responses");
}
/* If Total # of Form Responses >= Limit, Close Form */
function checkLimit() {
if (FormApp.getActiveForm().getResponses().length >= RESPONSE_COUNT ) {
closeForm();
}
}
/* Parse the Date for creating Time-Based Triggers */
function parseDate_(d) {
return new Date(d.substr(0,4), d.substr(5,2)-1,
d.substr(8,2), d.substr(11,2), d.substr(14,2));
}
/* Written by Amit Agarwal amit@labnol.org */
* No os asustéis con el código, sólo hay que copiar/pegar todo y modificar luego las tres primeras líneas para que se ajuste a nuestras necesidades.
Si no os sale o tenéis dudas ponerlas en los comentarios y trataré de contestarlas.
Fuente: Labnol.org. Sitio muy recomendable.
Si no os sale o no queréis complicaros con el script podéis instalar el complemento de formularios Formlimiter
Artículos relacionados.
– Creación de formularios con Google Drive. Nueva Versión.
Por Rafael Nuñez-Lagos abril 19, 2020 - 7:48 pm
@Daniel – Si, envíalo como un enlace sin incluir el formulario en el correo.
Por Paqui abril 19, 2020 - 12:00 pm
Hola, estoy probando esto y funciona… solo quiero saber…¿Existe la posibilidad de que en el excel que se genera con el formulario y guarda las respuestas, ademas de almacenar la fecha y hora de entrega (Marca temporal), almacene la hora que abrió el formulario y se registre en esa hoja excel?
Gracias
Por DANIEL LOPEZ abril 17, 2020 - 8:36 pm
Estimado:
me funcionó super bien el límite de la hora…pero al invitar por correo, antes del tiempo límite, en el correo que la recibía aparece el formulario dentro del correo…
Es decir, esa persona no puede responder el cuestionario, pero puede verlo…¡¡¡
Hay alguna solución para ello ??
Gracias
Por Rafael Nuñez-Lagos abril 17, 2020 - 5:48 pm
@Leonardo – El script coge la hora del PC del usuario.
Por Leonardo abril 17, 2020 - 1:08 pm
Muchas, muchas gracias. Funciona muy bien. Una consulta: ¿cuál es la hora de referencia, la del servidor de Google, la del usuario, y cómo podría consultarla?
Por Rafael Nuñez-Lagos abril 16, 2020 - 12:55 pm
@AnaR – Tienes que vincular las respuestas a una hoja de cálculo, una vez que las tienes ahí, puedes hacer las gráficas de datos personalizadas, para hacerlas seleccionas los datos y luego al botón de explorar para que te lo haga de forma automática.
Por AnaR. abril 15, 2020 - 4:46 pm
Hola, hay alguna forma de que cuando se guarden las respuestas del formulario en un test como pdf se guarde con una marca distinta las preguntas que han respondido bien y otra las que están mal respondidas. Porque cuando guardo las respuestas de mis alumnos, se me guarda pero tienen un mismo tick ya sea que hayan respondido mal o bien.
Por Rafael Nuñez-Lagos abril 15, 2020 - 11:10 am
@Regina – Si no te funciona bien es que no has seguido bien todos los pasos, lo he revisado el otro día al contestar a otro usuario y funciona perfectamente, puedes comprobarlo en este enlace, el formulario no se puede contestar desde ninguna cuenta a no ser que seas el propietario.
Por Regina abril 14, 2020 - 6:43 pm
Hola, el script se guarda bien pero al comprobar en otro correo distinto al mío el formulario indicado para que se abra en una fecha posterior, lo abro y puedo hacerlo. Por lo que la función de que se abra y se cierre en una fecha y hora no lo veo que funcione. Saludos.
Por Rafael Nuñez-Lagos abril 12, 2020 - 11:01 am
@Roger – Algún paso lo debes de hacer mal, ayer mismo lo probé haciendo todo de nuevo, formulario + script y funciona correctamente, no sé como te puedo ayudar…
Por Roger Rivera abril 11, 2020 - 10:58 pm
Estimado, buenas tardes, seria tan amable de explicarme esta parte:
Desde ya agardezco su amable atención, muchas gracias por todo su apoyo.
/* Parse the Date for creating Time-Based Triggers */
function parseDate_(d) {
return new Date(d.substr(0,4), d.substr(5,2)-1,
d.substr(8,2), d.substr(11,2), d.substr(14,2));
Por Roger Rivera abril 11, 2020 - 9:53 pm
He autorizado todo, he modificado solo las 3 primeras lineas, inicio Initialize se ejecuta correctamente pero no se apertura ni se cierra en la fecha ni hora que indico, nose que mas hacer, por favor alguna otra indicación.
Muchas Gracias
Por Roger Rivera abril 11, 2020 - 9:50 pm
He seguido cada indicación y no logro que funcione
Por Rafael Nuñez-Lagos abril 11, 2020 - 5:55 pm
@Roger – Acabo de probarlo y funciona correctamente, solo tienes que editar las primeras tres lineas del código y cerciorarte que la función que usas es initialize. Tienes que dar permiso cuando te pregunte, aún cuando diga que Google no lo ha revisado.
Por Roger Rivera abril 10, 2020 - 6:58 pm
Buenas tardes estimado, reciba un cordial saludo, cuando ejecuto la función Initialize no me ejecuta el código, únicamente ejecutando las funciones por separado, consigo que se abra o cierre el formulario. ¿Todo el código debe estar bajo una única función?
He intentado muchas veces y no logro descifrar cual es el problema, por favor podría ayudarme, desde ya millones de gracias.
Saludos.
Por Rafael Nuñez-Lagos abril 10, 2020 - 10:54 am
@Rafael – Solo tienes que editar las tres primeras lineas, lo demás no tienes que tocarlo ni borrar nada.
Por Rafael Pernett abril 9, 2020 - 10:02 pm
¡Hola! He hecho lo que sugiere: he pegado el script, he modificado la fecha y la hora de inicio y terminación, he borrado lo del numero de respuestas. Lo que aparece con asterisco al final del script lo he borrado. Pero al resolver el formulario no aparece nada en el que me indique cuando debo iniciar y cuando terminarlo. ¿Cómo se hace? Gracias.
Por Rafael Nuñez-Lagos abril 6, 2020 - 4:39 pm
@Antonio – Lo que te dice es que no se hace responsable de ese script y que puede poner en riesgo tus datos, es un mensaje genérico, le puedes dar a aceptar.
Por Antonio Izaguirre abril 6, 2020 - 2:12 am
Hola Gabriel intente utilizar tu script y al momento de ejecutarlo (Initialize) me marca la leyenda. Authorization required. ValidarFecha needs your permission to access your data on Google. Luego me pide iniciar sesión con mi cuenta. Choose an account to continue to ValidarFecha. Luego me manda un mensaje. This app isn’t verified. This app hasn’t been verified by Google yet. Only proceed if you know and trust the developer. Salen dos botones uno de advance y otro que dice Back to safety. En el advace dice Google hasn’t reviewed this app yet and can’t confirm it’s authentic. Unverified apps may pose a threat to your personal data Sabes que puede ser??? Agradezco tu apoyo. Saludos
Por Rafael Nuñez-Lagos abril 2, 2020 - 5:57 pm
@Gabriel – Puedes seleccionar una respuesta por usuario y recopilar el correo electrónico pero no puedes saber la dirección ip.