Apps Script untuk Cetak Sertifikat
Tutorial pembuatan sertifikat menggunakan Google Docs, Sheets dan Apps Script teleh penulias buat dalam video di bawah ini:
Sedangkan berikut ini adalah kode Apps Script yang penulis gunakan di dalam tutorial di atas:
function onOpen()
{
const ui = SpreadsheetApp.getUi();
const menu = ui.createMenu("Cetak Sertifikat");
menu.addItem("Cetak Sertifikat", "generateMode");
menu.addToUi();
}
function generateMode()
{
var idtemplate="1qseLMkdYIzmx0rhkKELF0xxlsD13CS1eCk0MlcTKt_g";
var idtarget="1ZLNksdiilEc0mQ88WOfAuU8_JcMVcO6ewXuJes-UU9I";
var ss = SpreadsheetApp.openById("1j1TArXYzRlVGvB9q7ly7NdyF-nsJcCH6RT3rOQik0yQ");
var so=ss.getSheetByName("Source");
var data=so.getRange("A1:C").getValues().map(function(row){return (row[0]!="")?row:null}).filter(function(cellData){return cellData != null;});
const docTemplate=DocumentApp.openById(idtemplate);
var docTarget=DocumentApp.openById(idtarget);
const bodyTemplate = docTemplate.getBody();
var bodyTarget = docTarget.getBody();
bodyTarget.appendParagraph("");
bodyTarget.clear();
for(var n=1;n<data.length;n++){
var cbody=bodyTemplate.copy();
for(var i=0;i<data[0].length;i++){
cbody.replaceText("<<"+data[0][i]+">>",data[n][i]);
}
for(var i=0; i<cbody.getNumChildren();i++){
switch (cbody.getChild(i).getType()){
case DocumentApp.ElementType.PARAGRAPH:
if(cbody.getChild(i).asParagraph().getText()!=""){
if(cbody.getChild(i).asParagraph().getText().indexOf("<<pageBreak>>")>-1){
bodyTarget.appendPageBreak();
}
bodyTarget.appendParagraph(cbody.getChild(i).copy());
}
break;
case DocumentApp.ElementType.LIST_ITEM:
bodyTarget.appendListItem(cbody.getChild(i).copy());
break;
case DocumentApp.ElementType.TABLE:
bodyTarget.appendTable(cbody.getChild(i).copy());
break;
case DocumentApp.ElementType.PAGE_BREAK:
bodyTarget.appendPageBreak();
break;
}
}
bodyTarget.appendPageBreak();
docTarget.saveAndClose();
docTarget=DocumentApp.openById(idtarget);
bodyTarget = docTarget.getBody();
}
if(bodyTarget.getParagraphs()[0]!=null && bodyTarget.getParagraphs()[0].getText()==""){
bodyTarget.getParagraphs()[0].removeFromParent();
}
bodyTarget.replaceText("<<barisKosong>>","");
bodyTarget.replaceText("<<pageBreak>>","");
docTemplate.saveAndClose();
docTarget.saveAndClose();
}
Salah satu kelemahan yang penulis temui, adalah jika jumlah data banyak, generate sertifikat akan membutuhkan waktu yang lama, bahkan gagal.

Komentar
Posting Komentar