Crear Reportes en PDF a partir de Google Sheets y Google Docs con Google Apps Script

Hoy vamos a aprender cómo generar reportes en PDF a partir de datos en Google Sheets. Este proceso puede ser útil para crear reportes de notas, facturas, cotizaciones, certificados, y más. En este tutorial, vamos a hacerlo paso a paso, sin utilizar complementos externos como Autocrat, sino únicamente con código.

Video

Paso 1: Crear la Estructura de Archivos

1.1 Crear las Carpetas en Google Drive

Primero, vamos a crear una estructura de carpetas en Google Drive para organizar nuestros archivos:

  • Carpeta Principal: Creación PDF
  • Subcarpeta 1: Documentos
  • Subcarpeta 2: PDFs
  • Subcarpeta 3: Temporal

1.2 Crear la Plantilla en Google Docs

Crear una plantilla en Google Docs que contendrá el formato del reporte. Ejemplo:

Certificamos que el alumno {{nombre}} {{apellido}} aprobó exitosamente el curso {{curso}} con una calificación de {{calificación}} en la fecha {{fecha}}.

Guarde este documento en la carpeta Documentos.

Paso 2: Configurar el Google Sheets

2.1 Crear el Google Sheets

En Google Sheets, cree una hoja con los siguientes datos:

Correo ElectrónicoNombreApellidoCursoFechaCalificación
email@example.comJuanPérezIntroducción a Google2023-01-0195

Paso 3: Escribir el Código en Google Apps Script

3.1 Abrir el Editor de Apps Script

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

3.2 Crear el Script Principal

function generarPDF() {
  // Identificaciones
  const idPlantilla = 'ID_DE_LA_PLANTILLA'; // ID del documento de Google Docs
  const idCarpetaPDF = 'ID_DE_LA_CARPETA_PDF'; // ID de la carpeta donde guardaremos los PDFs
  const idCarpetaTemporal = 'ID_DE_LA_CARPETA_TEMPORAL'; // ID de la carpeta temporal

  // Conexiones a Google Drive
  const carpetaPDF = DriveApp.getFolderById(idCarpetaPDF);
  const carpetaTemporal = DriveApp.getFolderById(idCarpetaTemporal);
  const archivoPlantilla = DriveApp.getFileById(idPlantilla);

  // Obtener datos de la fila activa en Google Sheets
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Datos');
  const filaActiva = hoja.getActiveCell().getRow();

  const email = hoja.getRange(filaActiva, 1).getValue();
  const nombre = hoja.getRange(filaActiva, 2).getValue();
  const apellido = hoja.getRange(filaActiva, 3).getValue();
  const curso = hoja.getRange(filaActiva, 4).getValue();
  const fecha = hoja.getRange(filaActiva, 5).getDisplayValue(); // Usar getDisplayValue para mantener el formato de fecha
  const calificación = hoja.getRange(filaActiva, 6).getValue();

  // Hacer una copia de la plantilla
  const copiaArchivo = archivoPlantilla.makeCopy(carpetaTemporal);
  const idCopia = copiaArchivo.getId();
  const documento = DocumentApp.openById(idCopia);
  const cuerpo = documento.getBody();

  // Reemplazar placeholders con datos reales
  cuerpo.replaceText('{{nombre}}', nombre);
  cuerpo.replaceText('{{apellido}}', apellido);
  cuerpo.replaceText('{{curso}}', curso);
  cuerpo.replaceText('{{calificación}}', calificación);
  cuerpo.replaceText('{{fecha}}', fecha);

  // Guardar cambios y convertir a PDF
  documento.saveAndClose();
  const blobPDF = copiaArchivo.getAs(MimeType.PDF);
  carpetaPDF.createFile(blobPDF).setName(`${nombre}_${apellido}_Certificado.pdf`);

  // Limpiar carpeta temporal
  copiaArchivo.setTrashed(true);

  // Enviar el PDF por correo (opcional)
  GmailApp.sendEmail(email, `Certificado del Curso ${curso}`, 'Adjunto encontrarás tu certificado en formato PDF.', {
    attachments: [blobPDF]
  });
}

3.3 Configurar Menú Personalizado

Para facilitar la ejecución del script, vamos a añadir un menú personalizado en Google Sheets.

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('Generar PDF')
    .addItem('Generar Certificado', 'generarPDF')
    .addToUi();
}

Paso 4: Pruebas y Ajustes

4.1 Ejecutar la Función de Permisos

Primero, ejecute una función que utilice todos los servicios requeridos para que se soliciten los permisos necesarios.

function permisos() {
  DriveApp.getFolders();
  DocumentApp.openById('ID_DE_LA_PLANTILLA');
  GmailApp.getDrafts();
}

4.2 Probar la Generación de PDF

En Google Sheets, seleccione una fila y use el menú Generar PDF -> Generar Certificado. Verifique que se genera el PDF en la carpeta correcta y que se envía por correo electrónico.

Conclusión

Este tutorial cubre la creación de reportes en PDF a partir de datos en Google Sheets, utilizando una plantilla en Google Docs y Google Apps Script para automatizar el proceso. Esto es una solución robusta y flexible para generar reportes personalizados.

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