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.

6 comentarios en “Crear Reportes en PDF a partir de Google Sheets y Google Docs con Google Apps Script”

  1. Buenos días, me funciona perfecto!!! el único inconveniente que no me genera el botón «reporte» en la hoja de sheet
    pongo el código . no encuentro el error

    function onOpen() {
    var ui = SpreadsheetApp.getUi();
    var menu = ui.createMenu(«Reportes»);
    menu .addItem(«Generar Conformidad (Doc)» , «generarPDF»).addToUi();

    }

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.