Crear masivamente reportes en PDF desde Google Sheets

Hoy vamos a aprender a enviar correos electrónicos con informes personalizados que incluyen gráficos. Estos informes pueden ser utilizados para enviar reportes a clientes, estudiantes o equipos de trabajo, personalizando cada correo con información específica para cada destinatario.

Paso 1: Configuración del Google Sheets

1.1 Crear las Hojas

Primero, necesitamos configurar nuestras hojas de Google Sheets. Vamos a crear tres hojas:

  • Datos: Aquí tendremos los datos crudos, como estudiantes, materias y calificaciones.
  • Envíos: Aquí registraremos si un informe ha sido enviado y el enlace al PDF.
  • Reporte: Esta hoja contendrá el reporte que queremos enviar, incluyendo tablas y gráficos.

1.2 Crear la Validación de Datos

En la hoja de Reporte, crearemos un desplegable para seleccionar el estudiante. Esto lo hacemos con una validación de datos:

  1. Seleccionamos la celda donde queremos el desplegable.
  2. Vamos a Datos > Validación de datos.
  3. Elegimos la opción de lista a partir de un rango y seleccionamos el rango de estudiantes en la hoja Datos.

1.3 Crear el Informe

Diseñaremos el informe en la hoja Reporte. Esto incluirá:

  • Un título que cambie según el estudiante seleccionado.
  • Una tabla dinámica o un filtro que muestre las calificaciones del estudiante seleccionado.
  • Gráficos que representen visualmente los datos del estudiante.

Paso 2: Configuración del Google Apps Script

2.1 Abrir el Editor de Apps Script

Desde Google Sheets, vamos a Extensiones > Apps Script para abrir el editor de código.

2.2 Escribir el Código

2.2.1 Función para Generar PDFs

Primero, creamos una función que genere PDFs a partir de la hoja de reporte:

function generarPDF(hoja, nombreArchivo) {
  const libro = SpreadsheetApp.getActiveSpreadsheet();
  const hojaReporte = libro.getSheetByName(hoja);
  const carpetaId = 'ID_DE_LA_CARPETA_PDF'; // Reemplaza con el ID de tu carpeta
  const carpeta = DriveApp.getFolderById(carpetaId);

  const url = libro.getUrl();
  const id = libro.getId();
  const nombreHoja = hojaReporte.getName();

  const pdf = DriveApp.getFileById(id).getAs('application/pdf');
  pdf.setName(nombreArchivo);
  const archivo = carpeta.createFile(pdf);

  return archivo.getUrl();
}

2.2.2 Función para Enviar Correos Electrónicos

Luego, creamos una función para enviar los correos electrónicos con los informes adjuntos:

function enviarCorreo(email, asunto, mensaje, urlPDF) {
  GmailApp.sendEmail(email, asunto, mensaje, {
    attachments: [UrlFetchApp.fetch(urlPDF).getBlob()]
  });
}

2.2.3 Función Principal para Iterar sobre los Estudiantes

Finalmente, creamos la función principal que iterará sobre los estudiantes y enviará los informes:

function generarYEnviarInformes() {
  const libro = SpreadsheetApp.getActiveSpreadsheet();
  const hojaEnvíos = libro.getSheetByName('Envíos');
  const hojaReporte = libro.getSheetByName('Reporte');
  const datos = hojaEnvíos.getDataRange().getValues();

  datos.forEach((fila, index) => {
    if (index === 0) return; // Saltar encabezados

    const [email, nombre, apellido, materia, fecha, calificación] = fila;
    hojaReporte.getRange('A1').setValue(nombre + ' ' + apellido); // Actualizar celda con nombre del estudiante

    // Esperar un momento para que se actualicen las gráficas
    Utilities.sleep(2000);

    const nombreArchivo = `Reporte_${nombre}_${apellido}.pdf`;
    const urlPDF = generarPDF('Reporte', nombreArchivo);

    enviarCorreo(email, 'Tu reporte de notas', `Hola ${nombre},\n\nAdjunto encontrarás tu reporte de notas.\n\nSaludos.`, urlPDF);

    hojaEnvíos.getRange(index + 1, hojaEnvíos.getLastColumn()).setValue(urlPDF); // Guardar URL del PDF en la hoja de envíos
  });
}

Paso 3: Probar y Ejecutar el Script

  1. Guarda el script.
  2. Vuelve a Google Sheets.
  3. Ve a Extensiones > Apps Script > Editor de secuencia de comandos.
  4. Ejecuta la función generarYEnviarInformes para probar que todo funciona correctamente.

Este script tomará cada estudiante, actualizará la hoja de reporte con sus datos, generará un PDF del informe y enviará un correo con el PDF adjunto.

¡Y eso es todo! Ahora tienes una solución automatizada para generar y enviar informes personalizados con gráficos desde Google Sheets.

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.

Pin It on Pinterest

Share This