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ónico | Nombre | Apellido | Curso | Fecha | Calificación |
|---|---|---|---|---|---|
| email@example.com | Juan | Pérez | Introducción a Google | 2023-01-01 | 95 |
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.
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();
}
Hola!
Ve a las ejecuciones y mira si te sale algun error al ejecutar el onOpen
Saludos!
Hola Juan, gracias por responder, no, al no aparece ningún error . pero tampoco crea el botón.
Daniel