Enviar un PDF basado en una plantilla de Google Docs cuándo se envía un formulario con los datos desde GoogleForms

Este tutorial está basado en éste otro .

un Blogger hispano

1r Paso. Crear la plantilla en Google Docs

Lo primero es hacer el documento que queremos usar como plantilla.

  1. Haz un documento nuevo en Google Docs.

2. Ponle un nombre que puedas reconocer. Ej.: Plantilla Matrícula.

3. Escribe el documento como si fueras a rellenarlo para ti mismo, pero dónde pondrías «Juan» pones {nombre}, dónde pondrías tu teléfono no pongas 9876543210, escribe simplemente {telefono}.

Así, con sus llaves delante y detrás. Si no te gusta, pon $nombre$, o pon PINGnombrePONG, pon lo que quieras que te permita distinguir una texto de relleno de uno de verdad. 99.9% de los informáticos recomiendan usar las llaves { } pero siéntete libre de hacerlo como quieras. Por si acaso, no uses tildes en los nombres de relleno. Luego te harán falta en el script y las tildes o caracteres especiales pueden ser incómodos.

PROFE DESESPERADO

4. Guarda ese documento en una carpeta nueva en tu unidad. Ej.: Plantillas

5. Olvídate de ese documento hasta que necesites retocarlo.

2o Paso. Hacer el formulario en Google Forms

Aquí es importante que tengas presentes algunas cosas. A saber:

1. Separado mejor que agrupado

Algunas opciones del formulario se guardan por separado y otras van agrupadas. No nos interesa que las opciones salgan agrupadas, sino que salgan por separado.

Me explico, si enviases las respuestas a una hoja de cálculo, lo que nos gustaría es tener cada respuesta en una celda diferente, y no 3 respuestas en una sola celda.

Por tanto, intenta usar sólo estos elementos:  respuesta corta, párrafo (respuesta larga), opciones múltiples (las bolitas), los cuadros desplegables y las fechas y horas.

2. El orden de los factores altera el producto.

Cuándo se envíe el formulario todos los campos que has ido preguntando se pondrán en un mismo saco que Google llama ITEM. ¿Cómo sabrás qué campo es el email y qué campo es el teléfono? Pues por el orden en que apareció en el formulario. 

Lo primero que preguntes, podría ser el correo del interesado. Si es lo primero que preguntas será el ITEM 0 (sé, ya sabes que los informáticos contamos desde 0 en adelante, no empezamos por el 1)

Si lo segundo que preguntaste era el nombre, eso será el ITEM  1

Por tanto, vas a tener que imprimir a PDF o dibujar o fotografiar tu formulario y poner el número que le toca a cada casilla para poder usarlo después en la plantilla.

3. Añadir el script al formulario.

Desde el menú ves al  editor de secuencias de comandos, borra todo lo que hay ahí que dice algo así como MyFunction y copia esto.

function onFormSubmit(e) {
  //open the template document by ID
  //you can find the ID in the link of the document
  var templateDoc = DriveApp.getFileById('ID_DE_TU_PLANTILLA_DE_DOC');
  //create a copy of the template, we don't wanna mess up the template doc
  var newTempFile = templateDoc.makeCopy();
  
  //open the new template document for editing
  var openDoc = DocumentApp.openById(newTempFile.getId());
  var body = openDoc.getBody();
  
  //get the responses triggered by On Form Submit
  var items = e.response.getItemResponses();
  
  //find the text in the template doc and replace it with the Form response
  //items[0].getResponse() is the first response in the Form
  //Las respuestas vienen en orden desde 0 hasta la ultima. Para mi ejemplo
  body.replaceText('{nombre}', items[0].getResponse());  
  body.replaceText('{fecha}', items[2].getResponse());
  
  //Save and Close the open document and set the name
  openDoc.saveAndClose();
  //Aqui le pone al documento el nombre de los campos 0 y 2 ... nombre y fecha.
  newTempFile.setName(items[0].getResponse() + '-' + items[2].getResponse())

  // convert the new document to PDF and mail it
  var theBlob = newTempFile.getBlob().getAs('application/pdf');

  // save the PDF to a Folder by using the folder ID
  var folder = DriveApp.getFolderById('ID_DE_LA_CARPETA_DE_DESTINO');
  var savePDF = folder.createFile(theBlob);
  savePDF.setName(items[0].getResponse() + '-' + items[2].getResponse() + '.pdf');

  var email = items[1].getResponse();//si tengo el email en el item 1
  var subject = 'Ahi va un mail';
  //Si tienes el nombre en el item 0, dira Hola y el nombre del que envió el formulario.
  var body = 'Hola ' + items[0].getResponse() + ', <br/>Ahi tienes tu documento.';
  GmailApp.sendEmail(email, subject, body, {
    htmlBody: body,
    attachments: [{
      fileName: items[0].getResponse() + ".pdf",
      content: theBlob.getBytes(),
      mimeType: "application/pdf"
      }]
   });

}

Le das a guardar y buscas el icono con un relojito. Allí vamos a crear el disparador.

4. Crear el disparador

Esto solo es decirle al sistema ¿cuándo queremos que ejecute nuestro código?

Se puede disparar al abrir el formulario, o al enviarlo. Nosotros queremos que lo dispare al enviarlo que es cuando tendremos todos los datos para generar el nuevo documento y enviárselo.

onFormSubmit significa justamente eso «cuándo se envíe el formulario».

5. Dar permisos

Cuándo guardes el disparador saldrá un «Pop-up» así que si los tienes bloqueados compruébalo en tu navegador y abre ese pop-up de Google. Un pop-up es lo que se llama en castellano  una ventana emergente.

Ahí te saldrá un aviso que parece muy peligroso -y lo es si no sabes lo que haces- pero que en esta ocasión no tiene peligro y dice algo así como:

¿Vas a dejar que un script tenga permiso para leer tus documentos, hacer cambios en ellos, cree ficheros en tu drive y haga cambios en tu drive como renombrar archivos, duplicarlos y esas cosas? ¿Vas a dejar que el script envíe correo en tu nombre con archivos que están en tu Drive?

El script lo has hecho tu, quieres que lea tu plantilla, que la duplique en tu Drive que la sobrescriba con los datos del formulario, que la guarde como PDF y que la mueva a una carpeta para plantillas. También quieres que coja ese archivo acabado de generar y lo envíe por mail automáticamente en tu nombre. Es decir, parece una locura, pero vas a tener que dar esos permisos al script si quieres que funcione.

Lo que no deberías hacer nunca es dar esos permisos a un script que no has hecho tu o que no entiendes lo que hace línea por línea.

6. Comprueba que todo funciona como esperabas.

Todavía alucino cuándo veo gente que entrega los trabajos sin comprobar.

Lo primero es ver que todo funciona, puedes hacer un ejemplo fácil y ver si te llega un correo a tu propio Gmail (pon tu propio mail como mail del interesado en el formulario).

Lo segundo es que vas a tener que probar TODOS los campos antes de darlo por bueno. Eso significa que vas a tener que rellenar una matrícula completa y ver que TODOS los datos están en el PDF dónde deberían. Que no se rompe el formato, que no salen cosas escondidas fuera del margen, etc.

7. Embellecer.

A la gente le entran las cosas por la vista, así que embellece. Puedes agregar un bonito banner al formulario de matrícula, puedes poner un logo del centro bonito en el documento, puedes formatear las tablas o los párrafos, etc.

Cómo el documento seguramente se imprima en escala de grises no te sugiero usar colores claros para los textos porque luego se imprimen muy claros y casi no se leen, pero a parte de eso, intenta que quede algo que a ti te gustaría leer.

Play That Class
Play That Class

Me encanta escribir, la tecnología y la educación. En estos artículos intento unir mis tres pasiones.

Artículos: 21

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *