Cómo generar y enviar PDFs masivos con Google Sheets y Docs

En este tutorial vamos a continuar con nuestra serie para crear documentos y enviarlos automáticamente usando Google Sheets y Google Docs. La idea es aprender a generar documentos y PDFs personalizados a partir de una plantilla, obtener retroalimentación en la hoja de cálculo con enlaces a los archivos generados, y enviar esos PDFs por correo electrónico. Esto es ideal para emprendedores, profesores o cualquier persona que necesite automatizar la generación y envío masivo de documentos personalizados, ahorrando tiempo y evitando errores manuales.

A continuación, te explicaré cómo implementar el código para generar PDFs masivos desde Google Sheets, cómo registrar los enlaces a los archivos generados, y cómo enviar esos documentos por correo electrónico con confirmaciones en la hoja.

1. Preparar la hoja y la plantilla de Google Docs

Para este sistema, partimos de una hoja de cálculo con los datos de los estudiantes o destinatarios, con columnas como nombre, apellido, correo, etc. También tenemos una plantilla en Google Docs que contiene marcadores de posición para reemplazar con esos datos.

ColumnaDato
ANombre
BApellido
CCorreo
G (7)Enlace Documento Google Docs
H (8)Enlace PDF generado
I (9)Casilla Enviado

Es importante reservar columnas para guardar los enlaces a los archivos generados y para marcar si ya se envió el correo, así podemos controlar el proceso y evitar duplicados.

2. Funciones para generar documentos y PDFs masivos

El código se basa en funciones que generan un documento Google Docs individual y un PDF a partir de la plantilla, reemplazando las variables con los datos de cada persona. Luego, guarda los enlaces en la hoja para que puedas acceder fácilmente.

function generarPDFEstudiante(alumno, fila) {
  // Crear documento a partir de plantilla y reemplazar variables
  var doc = crearDocumento(alumno);
  var urlDoc = doc.getUrl();

  // Crear PDF desde el documento
  var pdf = DriveApp.getFileById(doc.getId()).getAs('application/pdf');
  var carpetaPDF = DriveApp.getFolderById('ID_CARPETA_PDF');
  var archivoPDF = carpetaPDF.createFile(pdf);
  var urlPDF = archivoPDF.getUrl();

  // Guardar URLs en la hoja
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja1');
  hoja.getRange(fila, 7).setValue(urlDoc);
  hoja.getRange(fila, 8).setValue(urlPDF);

  return {doc: urlDoc, pdf: urlPDF};
}

Esta función recibe un objeto alumno con los datos y la fila donde se guardarán los enlaces. Primero crea el documento Google Docs, luego genera el PDF y finalmente guarda los enlaces en las columnas 7 y 8.

Para generar los PDFs masivamente, usamos un ciclo que recorre todas las filas, verifica si ya existe un PDF generado y solo crea uno nuevo si no hay enlace, para ahorrar tiempo.

function generarPDFsMasivos() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja1');
  var datos = hoja.getRange(2, 1, hoja.getLastRow()-1, 8).getValues();

  datos.forEach(function(alumno, i) {
    var fila = i + 2;
    var urlPDF = alumno[7]; // Columna H (índice 7)

    if (!urlPDF) { // Solo generar si no hay PDF
      var urls = generarPDFEstudiante({
        nombre: alumno[0],
        apellido: alumno[1],
        email: alumno[2]
      }, fila);
      Logger.log('PDF generado para fila ' + fila + ': ' + urls.pdf);
    }
  });
}

Este método evita generar documentos duplicados y acelera el proceso cuando tienes cientos de filas.

3. Enviar correos con los PDFs adjuntos y confirmación

Una vez generados los PDFs, podemos enviar un correo a cada destinatario con el PDF adjunto o un enlace para descargarlo. Además, podemos marcar en la hoja cuando el correo fue enviado para tener control.

function enviarCorreoEstudiante(alumno, fila) {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja1');
  var asunto = 'Certificado del curso para ' + alumno.nombre;
  var mensaje = 'Hola ' + alumno.nombre + ',\n\nAdjunto encontrarás tu certificado del curso.\n\nSaludos.';
  var archivoPDF = DriveApp.getFileByUrl(alumno.pdfUrl);

  MailApp.sendEmail({
    to: alumno.email,
    subject: asunto,
    body: mensaje,
    attachments: [archivoPDF.getAs(MimeType.PDF)]
  });

  hoja.getRange(fila, 9).setValue('Enviado'); // Columna I (9)
}

Para enviar correos masivamente solo recorremos la hoja y enviamos solo a quienes no tienen la marca «Enviado».

function enviarCorreosMasivos() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja1');
  var datos = hoja.getRange(2, 1, hoja.getLastRow()-1, 9).getValues();

  datos.forEach(function(alumno, i) {
    var fila = i + 2;
    var enviado = alumno[8]; // Columna I (índice 8)
    var pdfUrl = alumno[7]; // Columna H (índice 7)

    if (!enviado && pdfUrl) {
      enviarCorreoEstudiante({
        nombre: alumno[0],
        email: alumno[2],
        pdfUrl: pdfUrl
      }, fila);
      Logger.log('Correo enviado a fila ' + fila);
    }
  });
}

4. Mejoras y consideraciones finales

Este sistema es muy funcional para automatizar la generación y envío de certificados, reportes o cualquier documento personalizado. Algunas mejoras que puedes implementar son:

  • Agregar permisos de edición o visualización a los archivos generados para que los destinatarios puedan acceder sin problemas.
  • Crear una función para borrar PDFs antiguos y limpiar la carpeta de Drive.
  • Personalizar el contenido del correo con HTML para incluir imágenes y formato.
  • Separar la generación de documentos y el envío de correos para mayor control.
  • Incluir mensajes de confirmación o alertas en la hoja para saber que todo se realizó correctamente.

Con estos pasos tienes un sistema robusto para manejar documentos masivos con Google Sheets y Google Docs, que te ahorrará horas de trabajo manual.

Conclusión

En resumen, aprendimos a crear documentos y PDFs personalizados desde una plantilla en Google Docs usando datos de Google Sheets, cómo registrar los enlaces generados en la hoja para fácil acceso, y cómo enviar esos documentos por correo con confirmación en la hoja. Además, vimos cómo optimizar la generación masiva evitando duplicados y cómo manejar el envío masivo de correos. Este método es ideal para emprendedores y profesionales que necesitan automatizar procesos repetitivos y mejorar su productividad.

Como próximos pasos, te recomiendo explorar cómo personalizar los correos con HTML y agregar funcionalidades para borrar documentos antiguos automáticamente, para mantener tu Drive organizado.

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

JuanSGuzman
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.