Ich muss Etiketten aus einer Liste von Benutzerdaten generieren, die in einer Tabelle gespeichert sind. Im Moment bekomme ich alles gut funktioniert, außer wenn ich mehr als 16 Elemente (die Anzahl der Etiketten pro Seite) ausgibt habe ich mehr als ein Dokument, jedes von ihnen eine einzelne Seite. Jedes Dokument hat einen eindeutigen Namen, so dass es nicht sehr schwer zu benutzen ist, aber es ist langweilig, so viele Dokumente zu öffnen, um sie zu drucken. Da ich keine Vorlage von 500 Elementen (oder welcher Zahl) erstellen möchte, habe ich mich gefragt, ob ich diese einzelne Seitenvorlage in einem mehrseitigen Dokument beliebig wiederholen könnte, damit ich alle Etiketten in einem einzigen Dokument bekomme. Das wäre viel bequemer zu drucken ;-) Ich konnte bis jetzt keine Ahnung finden ... keine geniale Idee? Hier ist der Code, den ich verwende, um die Dokumente zu generieren (ein bisschen lang, tut mir leid):Wie kann ich ein mehrseitiges Textdokument aus einer einzelnen Seitenvorlage in Google-Apps-Skript generieren?
und ... vielen Dank für jede Hilfe.
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
}
//
Danke Henrique, ich dachte, dass das Zusammenführen eines Dokuments ein Track wäre, dem ich folgen sollte, aber ich gebe zu, dass ich mich nicht mit Docs und elementType auskenne ... Mit deinem Code werde ich sicher bekommen, was ich wollte ;-) –
arbeitete für Absätze und Listenelemente, aber die Tabellenelemente verloren ihre Formatierung. – David