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:
- Seleccionamos la celda donde queremos el desplegable.
- Vamos a
Datos>Validación de datos. - 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},nnAdjunto encontrarás tu reporte de notas.nnSaludos.`, 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
- Guarda el script.
- Vuelve a Google Sheets.
- Ve a
Extensiones>Apps Script>Editor de secuencia de comandos. - Ejecuta la función
generarYEnviarInformespara 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.
Hola Juan, requiero hacer un programa para llevar control de documentos de clientes con registros tanto medicos como legales. La información debo presentarla en un documento de Word o puede ser perfectamente Google Docs pero el control de los datos debo llevarlo en Google Sheets.
Me he tomado el atrevimiento de hacer copia de tu programa «Generar un documento de Google Docs a partir de mis Datos de Google Sheets»
He visto los otros dos videos despues de este y luego de copiar el Script e intentar de correr la aplicación , me sale el siguiente error:
// Hacer una copia de la plantilla
const copiaArchivo = archivoPlantilla.makeCopy(carpetaTemporal);
const idCopia = copiaArchivo.getId();
const documento = DocumentApp.openById(idCopia);
const cuerpo = documento.getBody();
Error Exception: The document is inaccessible. Please try again later.
generarPDF @ Código.gs:26
He podido corregir otros errores que me han salido pero no logro corregir este.
Saludos
Hola!
Revisa que si este creando la copia del archivo. Elimina o comenta todo lo de despues de const copiaArchivo=
Despues vete a tu drive a ver si si creó la copia
Creo que el problema está ahí
Saludos!