Elektronik tabloda saklanan kullanıcı verileri listesinden etiketler oluşturmalıyım. Şu anda her şey güzel çalışıyor, ancak 16'dan fazla öğe çıktı aldığımda (sayfa başına etiket sayısı) birden fazla belgem var, bunların her biri tek bir sayfa. Her bir dokümanın benzersiz bir adı vardır, bu yüzden kullanımı zor değildir, ancak bunları yazdırmak için çok fazla belge açmak sıkıcıdır. 500 öğeden oluşan bir şablon oluşturmak istemediğimden (ya da herhangi bir sayıdan) dolayı, bu tek sayfa şablonunu çok sayfalı bir belgede herhangi bir ekilde tekrarlayabilir miyim diye merak ettim, böylece tüm etiketleri tek bir belgede aldım. Yazdırmak çok daha rahat olurdu ;-) Şimdiye kadar hiçbir ipucu bulamadım ... parlak bir fikir? Burada dokümanlar oluşturmak için kullandığım kod (biraz uzun, bu konuda üzgünüm):Google-apps-script'te tek bir sayfa şablonundan nasıl bir çok sayfalı metin belgesi oluşturabilirim?
ve ... herhangi bir yardım için çok teşekkürler.
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
}
//
Teşekkürler Henrique, Birleştirilen belgenin takip edilmesi gereken bir parça olacağını sanıyordum ama itiraf etmeliyim ki, docs ve elementType ile çok rahat değilim ... Kodunuzla, istediğimi alacağım eminim ;-) –
Bu Paragraflar ve Liste Öğeleri için çalıştı, ancak Tablo öğeleri biçimlendirmelerini kaybetti. – David