Combinar correspondencia no existe propiamente entre las herramientas ofimáticas de Google, pero eso no es impedimento para crear una solución personalizada.
cuando hablo de una solución personalizada , me refiero a que por conocimiento propio se de la existencia de complementos o Addons como Autocrat, que para ser honesto no tengo el gusto de conocer más que de nombre, ya que como parte de mi proceso de aprendizaje procuro no usar complementos, sino escribir mi propio código que se adapte 100% a mis necesidades, de ahí que hable de medidas o soluciones personalizadas, además de no tener que lidiar con las características propias de estos complementos que son "fremium" en su mayoría y después de cierto tiempo tienes que habilitar las funcionalidades mediante un pago respectivo para que sigan operando.
por cierto, no tengo nada en contra de esto, pues se la laborosa tarea de un programador y si este servidor siendo un aprendiz, ocupa muchas horas en ello , no quiero imaginar en la cantidad de tiempo invertido en un complemento, sin duda más que merecido el cobro de las herramientas que ponen a disposición de otras personas, además como versa el refrán, "el obrero es merecedor de su salario"
dado que en mi condición, puedo hilar una que otra línea de código con cierto esfuerzo y dedicación, me he propuesto crear mis propias herramientas para solucionar mis necesidades. 😉
Este es el caso de combinar correspondencia en el cual vamos a comentar como llevar a cabo este proceso, para ello necesitaremos. (me dio la impresión de que estaba intentando escribir una receta de cocina jejejeje 😄 )
1.-un archivo de Google docs que usaremos como plantilla para crear mediante una copia de la misma otros archivos Google docs para después convertirlos en PDF
esta plantilla nos servirá también para ejecutar el código y desde ahí mediante un menú personalizado ,daremos clic para correr nuestro script que realice la tarea de combinar los datos entre Google docs y Google sheets
2.-un archivo Google sheets u HCG (Hoja de cálculo de Google) en el cual tendremos todos los datos que deseamos combinar con nuestra platilla Google doc
este lo dividiremos en varias partes
función onOpen para crear el menú personalizado desde el cual ejecutaremos nuestro script para combinar la correspondencia
la función combinarDocumentos que es nuestra función principal que crea los documentos Google docs y después los convierte en PDFs
las funciones auxiliares que extraen y retornan o regresan los valores a cada dato de la platilla que será sustituido y que a saber son en este ejemplo nombre, categoría y curso
si el tema fue de utilidad y de interés, por favor comparte el enlace de este articulo con aquellas personas que crees que les pude ser de utilidad
function onOpen(e) {
DocumentApp.getUi()
.createMenu('💌 Comb.Correspondencia')
.addItem('📑 Combinar ahora', 'combinarDocumentos')
.addToUi();
}
//=================== COMBINAR CORRESPONDENCIA/DOCUMENTOS ===============================================================
function combinarDocumentos(){
var doc = DocumentApp.getActiveDocument(); //obtiene el doc activo
var id =doc.getId(); //obtiene si id para usarlo y mas adelante generar una copia
var folder = DriveApp.createFolder("Combinar correspondencia-" + fecha()); //crea una carpeta con nombre especifico
//------------------------ Datos opconales no se requieren para la correspondencia --------------------------------------------
var url ="https://www.youtube.com/channel/UCWwxqBe1XjyLfbQy50HhEtQ/playlists";
var web = "https://sites.google.com/view/ofimaticaparaemprendedores";
//----------------------------------------------------------------------------------------------------------------------------
for (var i = 0; i < listaDeNombres().length; i++) {
var CreaMiCopia = DriveApp.getFileById(id).makeCopy(listaDeNombres()[i] + "-" + fecha(), folder); // crea la copia del doc
var idCopia= CreaMiCopia.getId(); //obtiene el id de la copia
var copiaDoc = DocumentApp.openById(idCopia); //abre la copia para poder ser editada
var copia = copiaDoc.getBody(); //obtiene el contenido del body
copia.replaceText("<NOMBRE>", listaDeNombres()[i]); //remplaza etiquetas por el dato
copia.replaceText("<CATEGORIA>", listaDeCategoria()[i]);
copia.replaceText("<CURSO>", listaDeCursos()[i]);
//----- hasta la linea anterior se hace el cambio de datos, las sig 5 líneas son innecesaria para combinar correspondencia ------
copia.replaceText("BASE DE DATOS: HCG", "");
copia.appendParagraph("aprende más con Ofimática para Emprendedores").setLinkUrl(url).setBold(true);
copia.getImages()[0].setLinkUrl(url);
copiaDoc.getFooter().clear();
copiaDoc.getFooter().setText("Visita mi WEB 🌍 ").editAsText().setLinkUrl(web).setBold(true).setFontSize(16).setBackgroundColor("#FFFF00");
//------------------------------------------------------------------------------------------------------------------------------
copiaDoc.saveAndClose(); //guarda cambios y cierra el archivo 0> equivale a flush en Google sheets.
var pdf = folder.createFile(copiaDoc.getAs('application/pdf'));//crea el pdf
DriveApp.getFileById(idCopia).setTrashed(true) //elimina el doc y deja el PDF.
}
DocumentApp.getUi().alert("Documentos creados exitosamente!! 😎");
}
//=========== funciones auxiliares ===================================
function fecha(){
var fecha = Utilities.formatDate(new Date(), "GMT-06:00", "dd-MM-yyyy");
Logger.log(fecha);
return fecha;
}
//funciones que obtiene los datos de la HCG
function listaDeNombres(){
var hoja = SpreadsheetApp.openById('aquí va el ID de tu Google sheet').getSheetByName("Hoja 1");
var nombres = new Array(4);
nombres = hoja.getRange("A2:A5").getValues();
//Logger.log(nombres);
return nombres;
}
function listaDeCategoria(){
var hoja = SpreadsheetApp.openById('aquí va el ID de tu Google sheet').getSheetByName("Hoja 1");
var categoria = new Array(4);
categoria = hoja.getRange("B2:B5").getValues();
//Logger.log(categoria);
return categoria;
}
function listaDeCursos(){
var hoja = SpreadsheetApp.openById('aquí va el ID de tu Google sheet').getSheetByName("Hoja 1");
var cursos = new Array(4);
cursos = hoja.getRange("C2:C5").getValues();
//Logger.log(cursos);
return cursos;
}
Síguenos y suscríbete en: