En este tutorial vamos a continuar con nuestra serie para crear documentos y enviarlos automáticamente usando Google Sheets y Google Docs. La idea es aprender a generar documentos y PDFs personalizados a partir de una plantilla, obtener retroalimentación en la hoja de cálculo con enlaces a los archivos generados, y enviar esos PDFs por correo electrónico. Esto es ideal para emprendedores, profesores o cualquier persona que necesite automatizar la generación y envío masivo de documentos personalizados, ahorrando tiempo y evitando errores manuales.
A continuación, te explicaré cómo implementar el código para generar PDFs masivos desde Google Sheets, cómo registrar los enlaces a los archivos generados, y cómo enviar esos documentos por correo electrónico con confirmaciones en la hoja.
1. Preparar la hoja y la plantilla de Google Docs
Para este sistema, partimos de una hoja de cálculo con los datos de los estudiantes o destinatarios, con columnas como nombre, apellido, correo, etc. También tenemos una plantilla en Google Docs que contiene marcadores de posición para reemplazar con esos datos.
| Columna | Dato |
|---|---|
| A | Nombre |
| B | Apellido |
| C | Correo |
| G (7) | Enlace Documento Google Docs |
| H (8) | Enlace PDF generado |
| I (9) | Casilla Enviado |
Es importante reservar columnas para guardar los enlaces a los archivos generados y para marcar si ya se envió el correo, así podemos controlar el proceso y evitar duplicados.
2. Funciones para generar documentos y PDFs masivos
El código se basa en funciones que generan un documento Google Docs individual y un PDF a partir de la plantilla, reemplazando las variables con los datos de cada persona. Luego, guarda los enlaces en la hoja para que puedas acceder fácilmente.
function generarPDFEstudiante(alumno, fila) {
// Crear documento a partir de plantilla y reemplazar variables
var doc = crearDocumento(alumno);
var urlDoc = doc.getUrl();
// Crear PDF desde el documento
var pdf = DriveApp.getFileById(doc.getId()).getAs('application/pdf');
var carpetaPDF = DriveApp.getFolderById('ID_CARPETA_PDF');
var archivoPDF = carpetaPDF.createFile(pdf);
var urlPDF = archivoPDF.getUrl();
// Guardar URLs en la hoja
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja1');
hoja.getRange(fila, 7).setValue(urlDoc);
hoja.getRange(fila, 8).setValue(urlPDF);
return {doc: urlDoc, pdf: urlPDF};
}
Esta función recibe un objeto alumno con los datos y la fila donde se guardarán los enlaces. Primero crea el documento Google Docs, luego genera el PDF y finalmente guarda los enlaces en las columnas 7 y 8.
Para generar los PDFs masivamente, usamos un ciclo que recorre todas las filas, verifica si ya existe un PDF generado y solo crea uno nuevo si no hay enlace, para ahorrar tiempo.
function generarPDFsMasivos() {
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja1');
var datos = hoja.getRange(2, 1, hoja.getLastRow()-1, 8).getValues();
datos.forEach(function(alumno, i) {
var fila = i + 2;
var urlPDF = alumno[7]; // Columna H (índice 7)
if (!urlPDF) { // Solo generar si no hay PDF
var urls = generarPDFEstudiante({
nombre: alumno[0],
apellido: alumno[1],
email: alumno[2]
}, fila);
Logger.log('PDF generado para fila ' + fila + ': ' + urls.pdf);
}
});
}
Este método evita generar documentos duplicados y acelera el proceso cuando tienes cientos de filas.
3. Enviar correos con los PDFs adjuntos y confirmación
Una vez generados los PDFs, podemos enviar un correo a cada destinatario con el PDF adjunto o un enlace para descargarlo. Además, podemos marcar en la hoja cuando el correo fue enviado para tener control.
function enviarCorreoEstudiante(alumno, fila) {
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja1');
var asunto = 'Certificado del curso para ' + alumno.nombre;
var mensaje = 'Hola ' + alumno.nombre + ',\n\nAdjunto encontrarás tu certificado del curso.\n\nSaludos.';
var archivoPDF = DriveApp.getFileByUrl(alumno.pdfUrl);
MailApp.sendEmail({
to: alumno.email,
subject: asunto,
body: mensaje,
attachments: [archivoPDF.getAs(MimeType.PDF)]
});
hoja.getRange(fila, 9).setValue('Enviado'); // Columna I (9)
}
Para enviar correos masivamente solo recorremos la hoja y enviamos solo a quienes no tienen la marca «Enviado».
function enviarCorreosMasivos() {
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja1');
var datos = hoja.getRange(2, 1, hoja.getLastRow()-1, 9).getValues();
datos.forEach(function(alumno, i) {
var fila = i + 2;
var enviado = alumno[8]; // Columna I (índice 8)
var pdfUrl = alumno[7]; // Columna H (índice 7)
if (!enviado && pdfUrl) {
enviarCorreoEstudiante({
nombre: alumno[0],
email: alumno[2],
pdfUrl: pdfUrl
}, fila);
Logger.log('Correo enviado a fila ' + fila);
}
});
}
4. Mejoras y consideraciones finales
Este sistema es muy funcional para automatizar la generación y envío de certificados, reportes o cualquier documento personalizado. Algunas mejoras que puedes implementar son:
- Agregar permisos de edición o visualización a los archivos generados para que los destinatarios puedan acceder sin problemas.
- Crear una función para borrar PDFs antiguos y limpiar la carpeta de Drive.
- Personalizar el contenido del correo con HTML para incluir imágenes y formato.
- Separar la generación de documentos y el envío de correos para mayor control.
- Incluir mensajes de confirmación o alertas en la hoja para saber que todo se realizó correctamente.
Con estos pasos tienes un sistema robusto para manejar documentos masivos con Google Sheets y Google Docs, que te ahorrará horas de trabajo manual.
Conclusión
En resumen, aprendimos a crear documentos y PDFs personalizados desde una plantilla en Google Docs usando datos de Google Sheets, cómo registrar los enlaces generados en la hoja para fácil acceso, y cómo enviar esos documentos por correo con confirmación en la hoja. Además, vimos cómo optimizar la generación masiva evitando duplicados y cómo manejar el envío masivo de correos. Este método es ideal para emprendedores y profesionales que necesitan automatizar procesos repetitivos y mejorar su productividad.
Como próximos pasos, te recomiendo explorar cómo personalizar los correos con HTML y agregar funcionalidades para borrar documentos antiguos automáticamente, para mantener tu Drive organizado.
Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.