Tengo que generar etiquetas a partir de una lista de datos de usuario almacenados en una hoja de cálculo. Ahora tengo todo funcionando bien, excepto que cuando imprimo más de 16 elementos (el número de etiquetas por página) tengo más de un documento, cada uno de ellos en una sola página. Cada documento tiene un nombre único, por lo que no es muy difícil de usar, pero es un poco aburrido abrir tantos documentos para imprimirlos. Como no quiero crear una plantilla de 500 elementos (o el número que sea), me preguntaba si podría repetir esta plantilla de una página en un documento de varias páginas en cualquier extensión, así que obtengo todas las etiquetas en un solo documento. Esto sería mucho más cómodo de imprimir ;-) No pude encontrar ninguna pista hasta ahora ... ¿alguna idea brillante? aquí está el código que uso para generar los documentos (un poco largo, perdón por eso):¿Cómo puedo generar un documento de texto de varias páginas a partir de una única plantilla de página en google-apps-script?
y ... muchas gracias por cualquier ayuda.
function print(e){
var app = UiApp.getActiveApplication();
var selrangerow = sh.getActiveSelection().getRowIndex();
var selrangeheight = sh.getActiveSelection().getNumRows();
var selrangeend = selrangerow+selrangeheight-1
var selrange = sh.getRange(selrangerow,1,selrangeheight,7).getValues();
var feuilles = Math.ceil(selrangeheight/16);
for (ff=1;ff<=feuilles*16;++ff){
if(ff>selrange.length){selrange.push([" "," "," "," "," "," "," "])} ;// remplit selrange jusqu'à multiple de 16 (nbre de feuille)
}
//Logger.log(selrange)
//Logger.log(e.parameter.mode) ;// gauche=true, centre = false
if(e.parameter.mode=='false'){
var doctemplate = DocsList.getFileById(labeltemplatedoc);// false >> centre
}else{
var doctemplate = DocsList.getFileById(labeltemplatedocleft);// true >> gauche
}
//Logger.log("File name: " + doctemplate.getName());
var FUS1=new Date().toString().substr(25,8);// FUS1 gets the GMT+0200 or GMT+0100 string
if (FUS1!="GMT+0200"){FUS1="GMT+0100"};// and takes care of summer time !
for(page=0;page<feuilles;++page){
var today=Utilities.formatDate(new Date(),FUS1,"dd-MM-yyyy")+"__"+Utilities.formatDate(new Date(),FUS1,"HH:mm")
if (Number(page+1)<10){var docnb="0"+Number(page+1)}else{var docnb=Number(page+1)}
var docname="IMPRESSION_page_"+docnb+"_"+today;
var docId=DocsList.copy(doctemplate,docname).getId();
//Logger.log(selrange)
var doc = DocumentApp.openById(docId);;
var lib=["titre","nom","prénom","rue","code","ville","pays"]
for(nn=1;nn<=16;++nn){
for(ll=0;ll<lib.length;++ll){
var olditem = ("#"+lib[ll]+nn+"#");
var newitem = selrange[nn-1+page*16][ll];
if (newitem!=""){newitem=newitem+" "}
//Logger.log(olditem + " *"+newitem+"*")
doc.replaceText(olditem,newitem);
}
}
Utilities.sleep(300); // pause entre les feuilles
}
app.getElementById("end").setText(feuilles+" feuille(s) se trouve(nt) dans vos documents Google prête(s) à être imprimée(s).");
var doclist=DocsList.getRootFolder().getFilesByType("document",0,2000);
var names = new Array();
for (nn=0;nn<doclist.length;++nn){
if(doclist[nn].getName().match("IMPRESSION_page_")=="IMPRESSION_page_"){
names.push([doclist[nn].getName(),doclist[nn].getId()]);
}
}
names.sort();
for(nn=0;nn<names.length;++nn){
app.getElementById("Dlb").addItem(names[nn][0])
}
app.getElementById("clock").setVisible(false);
app.getElementById("Dlb").setVisible(true);
return app
}
//
Gracias Henrique, pensé que fusionar documentos sería una pista para seguir, pero admito que no estoy muy cómodo con los documentos y elementType ... Con tu código, estoy seguro de que obtendré lo que quería ;-) –
This funcionó para Párrafos y Elementos de la Lista, pero los elementos de la Tabla perdieron su formato. – David