Modificar respuesta formularios web de Google Drive

recuperar documento google docsHace tiempo comenté que me gusta mucho la herramienta que ofrece Google Docs para crear formularios web fácilmente y recoger información que luego podamos utilizar en nuestro provecho.

Estos días la utilicé para poner en común los resultados de la prueba inicial de matemáticas que realizamos a todos los alumnos de 1º e la ESO y me di de bruces con un problema que no esperaba: si modificas los datos (como corregir algún valor mal introducido o eliminar entradas duplicadas) ¡en el resumen automático siguen apareciendo los valores originales ignorando los cambios! 😦

Buscando en foros encuentro que es un comportamiento “normal” (Google Forms guarda los datos en el formulario y no en la hoja de cálculo que te permite asociar) y que Google, de momento, no tiene intención de solucionarlo.

Aquí os cuento cómo me las he apañado para que el Resumen de respuestas muestre en las gráficas los datos corregidos y no los introducidos originalmente en el formulario

Se ha publicado una nueva versión del script que obtiene automáticamente los campos del formulario web. Aunque volverás aquí, te recomiendo visitar el siguiente artículo donde se explica el nuevo procedimiento 😉

Objetivo

Poder editar los datos introducidos en el formulario web creado con Google Drive de modo que el Resumen de respuestas muestre la información correctamente

generar automáticamente gráficas encuesta

Solución propuesta

Eliminaremos todas las respuestas introducidas y simularemos, mediante un script en Python, que el usuario vuelve a introducir los datos correctamente.

Inicialmente pensé en hacerlo en Bash con el comando curl pero con Python garantizo que puede utilizarse en otros sistemas operativos distintos a Linux 😉

Manos a la obra

1. Evita nuevos datos

Para evitar que se pierda información lo primero que debemos hacer es poner “offline” el formulario durante el tiempo necesario para

  1. copiar los datos actualmente introducidos (y que vamos a reenviar con el script en Python)
  2. eliminar los datos existentes (no sufras, ya “volverán”)

Para ello usaremos la siguiente opción

bloquear formulario web

2. Exporta las respuestas

Guarda las respuestas en formato CSV

exportar datos formulario web a csv

Edita las contestaciones (inserta nuevas entradas, borras las que no sirvan, edita aquellas con datos incorrectos, …) sobre el fichero de texto que has exportado (respetando la “sintaxis”) pues, como hemos indicado, los datos que utiliza se almacenan en el formulario y no en la hoja de cálculo que hayas podido (es opcional) vincular.

3. Borra las “evidencias”

Elimina todas las respuestas introducidas por los usuarios sin miedo. Como hemos comentado, las respuestas que introducen los usuarios se guardan en el formulario; el tener vinculada una hoja de cálculo (como hemos hecho en el paso 2) es una “deferencia” de Google para que podamos ver qué han introducido. Al borrar las respuestas, los datos de la hoja vinculada se mantienen; lo que se elimina es la información del formulario.

Las respuestas se eliminan utilizando la siguiente opción

limpiar formulario web

4. Permite seguir contestando

Una vez que has limpiado las respuestas (en el paso anterior) ya puedes dejar que nuevos usuarios introduzcan sus opiniones en el formulario. Déjales trabajar (para que se note lo menos posible que estamos “haciendo trampas”) con la misma opción que utilizamos en el paso 1

desbloquear formulario web

5. Prepara los datos a importar

Para que el script funcione correctamente; el fichero que exportamos en el paso 2 debe tener como cabecera, los nombres de los campos del formulario que estemos utilizando.

Para el ejemplo que he puesto, en lugar de

editar fichero csv fácilmente

debemos tener

modificar ficheros csv

Para obtener los nombres de los campos puedes

  • hacerlo manualmente viendo el código fuente del formulario html
  • valerte de jQuery para generar automáticamente la información que necesitamos

Como, salvo que el formulario sea muy pequeño, dudo que quieras dejarte los ojos viendo etiquetas html, imagino que la opción de jQuery es tu preferida así que te recomiendo que

  1. mires el artículo en el que explicábamos cómo injectar jQuery en cualquier página web
  2. abras el formulario de Google Docs como si fueses a meter una nueva respuesta
  3. lances, desde la consola las siguientes instrucciones
eltos=new Array();$("div[class='ss-form-entry'] *[name]").each(function(){eltos.push($(this).attr('name'))}); eltos=eltos.filter (function (v, i, a) { return a.indexOf (v) == i }); eltos.join('","')

Obtendrás algo parecido a

listar campos formulario web

que debes copiar y pegar (sustituyendo los nombres de columnas originales salvo la de “Marca temporal”) en el fichero con las respuestas que exportamos en el paso 2.

Como vimos anteriormente, el resultado quedaría

editar el contenido de un fichero csv

7. Importa las respuestas que teníamos inicialmente

Necesitarás

  1. descargar el siguiente script en Python
  2. editar el script para
    • indicar la url del formulario desde el que introducen las respuestas nuestros usuarios (sí, el que usamos para obtener los nombres de los campos)
    • indicar la ruta al fichero que contiene el “export” de las respuestas
  3. ejecutar el script de Python (un python2 ./importar.py debería ser suficiente ;))

Por si te sirve de orientación, aquí se encuentra la información que debes editar en el paso 2.

modificar script python

Respira

Si has conseguido seguir todos los pasos hasta aquí (sin volverte loco) y no aparece ningún error (sólo un “puntito” por cada una de las respuestas del fichero) es porque eres un máquina todo ha salido bien; ya sólo te quedaría abrir el formulario en Google Drive y comprobar que el contador de respuestas (y el resumen automático de Google) incluye todas las respuestas que acabamos de enviarle.

Conclusión

Aunque

  • no es todo lo sencillo que cabría esperar
  • se podrían automatizar algunos pasos para que el usuario tuviese que hacer menos y no se equivocase

cuando le coges el truco no es tan complicado como parece en un principio.

Conforme he ido escribiendo el artículo me he dado cuenta que el propio script en Python podría, entre otras cosas, obtener los campos a partir de la url del formulario pero tened en cuenta que

  • lo “inventé” y programé en un par de horas porque tenía que dar una respuesta rápida a un problema que me estaba “quemando” (había propuesto algo que no estaba funcionando como debiera y al día siguiente teníamos una reunión en la que presentar los resultados)
  • tener que modificar las respuestas es algo que no voy a tener que hacer constantemente por lo que puede no merecerme la pena optimizarlo. Os puedo asegurar, que por mi naturaleza, si lo hago más de dos veces terminaré mejorando el proceso 😉

Espero que os sea de utilidad y, cualquier duda y/o problema, no dudéis en preguntar, estaré encantado de echaros una mano

56 comentarios en “Modificar respuesta formularios web de Google Drive

  1. Basil Daniel dijo:

    Una vez obtengas respuestas, podrás consultarlas desde tu cuenta de Google Drive. En principio los resultados se abrirán como una hoja de cálculo, mostrando todas las respuestas en celdas.

  2. angeldr dijo:

    Buenos días!!

    Ante todo gracias por el tuto, espero me sirva… siempre que solvente este error. Estoy intentando ejecutar el script, pero me sale el siguiente error:
    ————————————————–
    File “importar.py”, line 8, in
    import request

    ImportError: No module named requests
    ————————————————–

    Me podrías echar una mano para solvertar este error??

    Muchas gracias.
    Saludos.

    P.D. Estoy ejecutanto el script desde W7

  3. Asaly dijo:

    Hola. No soy experta en el tema de la programación,pero por equivocación borre las respuestas del formulario. Aunque por precaucion lo descargué en .xlsx y .svc, me quedé en el paso 6, el de exportación porque desconozco de qué modo puedo obtener los nombres de los campos de mi formulario, y los demás pasos en verdad que no sé cómo ejecutarlos. Agradecería mucho que me pudieras colaborar indicandome de qué manera puedo recuperar estas respuestas para que el reporte que tengo.

  4. Juan Miguel moreno dijo:

    Enhorabuena, me ha encantado la solución. En concreto estaría interesado en hablar contigo para proponerte que te incorpores en un proyecto de recogida de datos. A ver si puede sacar unos minutillos para hablar. Mi mail aparece en este post. Un abrazo y gracias por ayudar a la comunidad.

  5. Cesar Betancourt dijo:

    Cordial saludo, estoy siguiendo los pasos de tu post pero no se como ejecutar el paso 7, soy neofito en esto, te agradeceria mucho que me indicaras como realizar esta accion paso a paso,

  6. Sha dijo:

    Hola, te deje un mensaje en Soporte técnico, porque me encantaría que me ayudes con este problema de la herramienta que estoy teniendo, espero tu respuesta lo antes posible. Muchas gracias.

  7. Manuel dijo:

    Buenas. Acabo de enviarte un correo electrónico por una duda sobre el artículo. A ver si puedes ayudarme a solucionarla. Saludos y gracias.

  8. dani dijo:

    Hola, he seguido todos los pasos y el script parece que se ejecuta bien, me salen tantos puntos como respuestas quiero importar. El tema es que el formulario parece no enterarse y no se actualizan los resultados, por más que lo ejecuto sigo teniendo 0 resultados. Me podéis echar un cable?

  9. Estimado, veo que tenés mucho mas claro el tema de formularios en Google que yo.. por lo que te molesto para ver si podés darme una mano con un tema que me supera.. y me hace trabajar muuuuuuchoooooo mas de lo que debería.

    El tema es este: tengo un formulario que me solicita info y llena una base de datos, entiéndase una hoja de calculo de docs (hasta acá todo bien).
    El problema se presenta cuando necesito recuperar los datos cargados en la base de datos y modificar uno de los registros. El problema es que no encuentro en ningún lado como se hace ésto.. entiendo que google tampoco provee ésta utilidad, por lo que solo me queda buscar en las “respuestas de la hoja de calculo” uno por uno de los registos, ubicarme en la columna donde deseo modificar información y desde ahí hacerlo.. El gran problema radica en que tengo mas de 5000 registros por mes.. y se torna bastante complicado… por lo que pensé si fuera posible un formulario que recupere la info y que habilite modificar la misma al igual que funcionan los formularios de excel.

    Desde ya, muchas gracias con todo lo que puedas hacer para ayudarme.

    Saludos.

    • Hola Nelson… siempre puedes exportar las respuestas y procesarlas con la herramienta que más te convenga.

      Si no te interesan las gráficas que realiza la herramienta automáticamente, te recomendaría borrar todo aquello que exportes para evitar duplicidades y, sobre todo, inconsistencias en los datos.

      Suerte y un saludo

  10. Carol Duque dijo:

    Hola. diseñe un formulario y antes de enviarlo borre las respuestas del formulario por las pruebas que estaba haciendo. Envie el formulario y ahora cuando quero ver la hoja me da el siguiente mensaje “Lo sentimos, el archivo que has solicitado no existe. Asegúrate de que tienes la URL correcta y de que el propietario del archivo no lo ha eliminado” existe alguna manera de cuando termine el proceso de la encuesta pueda recuperar toda la data? puedo ver el resumen pero la hoja de respuesta no. Agradecida si pudieses ayudarme

  11. Edison dijo:

    Traceback (most recent call last):
    File “C:/Users/Dani/Desktop/as”, line 8, in
    import requests
    ImportError: No module named requests

    Me sale esto amigo… yo realmente no se nada de programacion, pero logre llegar hasta ese paso, ahora me encuentro algo preocupado porque no tengo ni los datos “malos” ni nada…. realmente me pierdo en la parte de la fijacion del archivo a exportar, ya que en el ejemplo no veo una ruta, sino solamente el nombre de tu archivo entonces no se que hacer realmente.

    Te agradecería tu ayuda.

  12. Xavier dijo:

    ¡Hola de nuevo!

    Me he dado cuenta de que se ha porducido un error en el mensaje anterior,
    y lo vuelvo a escribir.

    Cuando lanzo desde consola las instrucciones,
    obtengo este error en la consola:

    error inesperado de sintaxi cerca de la señal (

  13. Xavier dijo:

    ¡Gracias!

    Cuando lanzo desde consola las instrucciones:

    eltos=new Array();$(“div[class=’ss-form-entry’] *[name]”).each(function(){eltos.push($(this).attr(‘name’))}); eltos=eltos.filter (function (v, i, a) { return a.indexOf (v) == i }); eltos.join(‘”,”‘)

    obtengo este error en la consola:

    error inesperado de sintaxi cerca de la señal ‘(‘

    Si no te aparecen las instrucciones que intento copiar para que las veas,
    te diré que se trata de las mismas que aparecen antes de la frase

    Obtendrás algo parecido a

  14. Landy dijo:

    HOLA! mil gracias por la información, tengo una enorme duda a partir de de este mes no me deja copiar del resumen de respuestas a una hoja de word “las gráficas” y hace apenas en el mes de mayo si podía ahhhhh estoy desesperada por que tuve que imprimir pantallas para poder copiar para una presentación las gráficas del resumen de respuestas pero no se ven muy claras …. ojala alguién me pueda ayudar.
    Gracias !!

  15. Pablo Guillermo Torres Auad dijo:

    te agradecería colaboración en el paso 7… debo instalar python ? puedo ejecutar desde chrome ?
    los pasos anteriores salen perfectos pero no se como ejecutar un script de python..

    el archivo esta en c:\ en windows 7 para indicar la ubicacion del archivo en python puedo ponerFICHERO_DATOS=’c./datos-reales.csv’

  16. David lanzas dijo:

    Buenos días:

    He ejecutado correctamente todo, pero me sale el siguiente error al ejecutar el script:

    Traceback (most recent call last):

    File “script2.py”, line 30, in
    payload[header[colnum]]=col
    IndexError: list index out of range

    No se a que puede ser debido, ¿Podría decirme donde está el error?

    Muchas gracias de antemano por la atención prestada.

    Saludos

  17. Fernando dijo:

    ¿Utilicé un formulario para crear un catálogo de clientes?
    Ahora quiero modificar cierto cliente, pero no lo quiero hacer desde la hoja de cálculo, si no desde el formulario.
    ¿Como hago para modificar un cliente en especifico pero desde la plantilla del formulario?

  18. Esto está muy por encima de mis capacidades, tengo que admitirlo. Necesito ayuda urgente, borré las respuestas, y bueno, ahora solo tengo el archivo en una hoja de cálculo, me gustaría hacer esto pero no entiendo nada. Alguien me podría ayudar, estoy que lloro

  19. gabriel dijo:

    Estimado consulta que debo hacer para que los alumnos cuando les envió el url de la prueba solo la puedan ver una sola vez, ya que debo tomar esa misma prueba en 3 cursos con los cuales tengo clases en distintos dias y no quiero se filtre la prueba, ¿ que debo hacer para que solo puedan ver y rendir solo una vez la prueba? desde ya muchas gracias

    • Con Google Apps for Education sería más sencillo pero, teniendo en cuenta que la prueba la realizará en días distintos (por lo que tendría tiempo para hacer sin agobiarse demasiado) yo optaría por compartir la prueba sólo con los alumnos del grupo que va a examinarse al día siguiente.

      De este modo se asegura que sólo ellos pueden acceder al formulario.

  20. Jordi Rodon Cuixart dijo:

    Yo estoy buscando una forma para que los usuarios puedan editar lo que hayan escrito en el formulario. Más o menos utilizar el formulario como sistema de edición de la hoja de cálculo. He estado probando la extensión Awesome peró sólo funciona si los datos se han entrado desde el formulario y yo ya tengo los datos en la hoja de cálculo. A ver si me explico, tengo los datos de los alumnos en la hoja de cálculo y los quiero editar a través del formularo…
    Gracias.

    • Se entiende perfectamente Jordi.

      Lo tengo anotado en mi lista de tareas pendientes pero, desgraciadamente no he encontrado el tiempo necesario para poder implementar dicha posibilidad (y/o investigar si existen soluciones como Awesome, gracias por descubrírmela)

      Se agradecerá comentario sobre cualquier logro que puedas hacer al respecto (así, cuando encuentre la oportunidad de dedicarle el tiempo que se merece, me/nos será de gran utilidad)

      Suerte y un saludo compañero

  21. Ingrid dijo:

    No consigo pasar del punto 6 y esta en juego los datos de mi proyecto, necesito ayuda urgente, nose cómo ejecutar el script en python y no me salen las entradas del punto 6, me sale “” como si ese paso fuera antes de eliminar las respuestas, necesito que por lo menos me aparezcan las anteriores AYUDAAA!!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s