Muszę wygenerować etykiety z listy danych użytkownika przechowywanych w arkuszu kalkulacyjnym. Teraz wszystko jest ładnie działające, z tym wyjątkiem, że gdy wyprowadzam więcej niż 16 elementów (liczba etykiet na stronę), mam więcej niż jeden dokument, z których każdy jest pojedynczą stroną. Każdy dokument ma unikatową nazwę, więc nie jest trudny w użyciu, ale nudne jest otwierać tak wiele dokumentów, aby je wydrukować. Ponieważ nie chcę tworzyć szablonu z 500 pozycji (lub dowolnej liczby) zastanawiałem się, czy mogę powtórzyć ten szablon pojedynczej strony w wielostronicowym dokumencie w jakimkolwiek zakresie, więc otrzymam wszystkie etykiety w jednym dokumencie. Byłoby znacznie wygodniej drukować ;-) Nie mogłem znaleźć żadnej wskazówki do tej pory ... żadnego genialnego pomysłu? tutaj jest kod, którego używam do generowania dokumentów (trochę długo, przepraszam za to):Jak wygenerować wielostronicowy dokument tekstowy z jednego szablonu strony w skryptach google-apps?
i ... wielkie dzięki za pomoc.
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
}
//
Dzięki Henrique, myślałem, że dokument scalający będzie ścieżką do naśladowania, ale przyznaję, że nie czuję się zbyt komfortowo z dokumentami i elementType ... Z twoim kodem jestem pewien, że dostanę to, co chciałem ;-) –
To pracował dla akapitów i elementów listy, ale elementy tabeli straciły formatowanie. – David