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 Gabriel Cortés abril 1, 2020 - 5:20 pm
Hola buenas tardes, quisiera saber si es posible saber la dirección IP desde dónde se envía el formulario. Lo que busco es evitar que conteste otra persona de la que está dirigido este, lo conteste desde otra dirección IP.
Por Rafael Nuñez-Lagos marzo 26, 2020 - 1:33 pm
@José – En el script puedes especificar la hora y el día en que se cierra el formulario.
Por Jose marzo 26, 2020 - 10:58 am
Hola.
¿Cómo hago para que después de la fecha límite de entrega, el estudiante no pueda enviar su formulario?
Por Rafael Nuñez-Lagos marzo 24, 2020 - 12:52 pm
@Sebastián – La apertura y cierre del formulario lo controlas desde el script por fechas y horas.
Por Sebastian marzo 21, 2020 - 2:37 pm
Disculpe, es que hago ese proceso y en el momento en que se intenta entrar fuera del horario no se puede entrar pero cuando ya esta en la franja de presentacion, sigue bloqueado hasta que yo de un permiso. Hay forma de que sea automatico que en el momento de intentar ingresar en el horario se acceda sin necesidad de permisos dados por mi ??
Por Hector marzo 5, 2020 - 7:19 pm
Hola gracias por tu tutorial, quiero saber como hacer algo;
Me gustaría que después de que cada usuario responda un formulario, no me de la respuesta «se registró tu respuesta», si no que me muestre un número de folio, ese número de folio sea el número de registro de respuesta. es decir: FormApp.getActiveForm().getResponses().length
¿Cómo le puedo hacer?
Por EMILIO TOMATIS febrero 2, 2020 - 10:33 pm
hola. He realizado todo lo que ofrecés. Pero le puse fecha para que se abra MAÑANA, dia 3. Y ahora, al abrirlo me permite hacerlo. Qué cosa no realicé correctamente?
Por Carolina enero 17, 2020 - 3:56 pm
Hola. Se puede contestar a la encuesta diariamente? Las mismas preguntas y las mismas personas.
Por Rafael Nuñez-Lagos septiembre 16, 2019 - 1:41 pm
@Neus – Si puedes, tienes que establecer las fechas de apertura y cierre del formulario, lo que pasa es que tendrías que modificarlo cada día, mira en los complementos de los formularios a ver si hay alguno que lo haga de forma automática o si sabes algo de Javascript añade el código al script.
Por Neus septiembre 13, 2019 - 12:57 pm
Hola, me parece muy útil tu aporte pero mi particularidad es que necesito que cada día del año, se pueda contestar solo durante 20 minutos desde que mando el enlace, es posible??? Muchas gracias
Por Dante septiembre 3, 2019 - 8:05 pm
Buenas Tardes al ejecutar el script me da un error «Servicio solicitado demasiadas veces para un mismo día: email. (línea 46, archivo «Código»)Ignorar»
linea 46: MailApp.sendEmail(Session.getActiveUser().getEmail(), subject, formURL);
como lo soluciono
Por Ricardo Gaviria Arroyave agosto 21, 2019 - 8:50 pm
Buenas Tardes
Me gustaría saber si se puede restringir el campo de fechas a un rango, es decir, por ejemplo al plantear un acuerdo de pago, que solo aparezca que puede poner la fecha de hoy y 15 días adelante, es decir, que no se puedan registrar fechas menores al día de hoy. Muchas gracias
Por Jaime julio 28, 2019 - 2:33 am
Cómo puedo evitar que el usuario al cual le he enviado la encuesta, copié el enlace y se la envíe a un compañero para responder con otro correo. Me interesa que solo ciertas personas pueda. Responder, no todas las personas de mi empresa.
Por Rafael Nuñez-Lagos junio 23, 2019 - 6:01 pm
@Diana – Mira a ver si te vale el complemento Forlimiter, este es el enlace.
Por Diana junio 21, 2019 - 1:07 pm
Hola, gracias por tu maravilloso aporte. Yo deseo inhabilitar los días lunes y martes del campo fecha de mi formulario de google. Cómo podría hacer eso? Muchas gracias! Deseo que puedas ayudarme.
Por Rafael Nuñez-Lagos mayo 29, 2019 - 10:44 am
@Leire – Tienes el error en el punto 6 del tutorial, al inicializar el script, tienes que seleccionar «Initialize«.
Por Leire mayo 14, 2019 - 3:18 pm
Hola, he copiado todo y he modificado lo de las fechas y demás y al darle permisos me sale error: Función de comandos de secuencia no encontrada: myFunction.
¿Qué me falta?
Por Rafael Nuñez-Lagos abril 18, 2019 - 12:49 pm
@Javier – De forma automática no puedes a no ser que lo hagas con un script, puedes guardar una copia de las respuestas y vaciar la hoja de cálculo o hacer una copia de las respuestas y vincular otra hoja de cálculo.
Por javier abril 10, 2019 - 9:03 am
Hola. He utilizado tu procedimiento para limitar respuestas y lo he conseguido. Ahora queríamos conseguir que al saturarse un formulario se enlazara con otro abierto automáticamente. Hay alguna manera?
Por Martín abril 2, 2019 - 6:45 pm
Por favor, quería saber si puedo recuperar un formulario que tenía en mi unidad de Google Drive. Ahí tenía mi formulario y algunas respuestas de los encuestados. Saqué esa carpeta donde estaba el cuestionario y lo guardé en un disco duro. Ayer vacié la papelera de Google Drive, pero no me imaginaba que al volver a incluir la carpeta que tenía, con el archivo .gform, no lo iba a poder abrir. Pone que no es válido, que no encuentra la URL…Es decir, el archivo .gform o tengo pero no lo puedo abrir. ¿Qué puedo hacer? Muchas gracias.