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