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



Postingan populer dari blog ini

Game TicTacToe dengan Greenfoot

Algorithma Julianday dengan Java

Balapan Santai Kediri-Malang tiap Hari Senin Pagi

Jasa Penjadwalan Semester, UTS dan UAS Perguruan Tinggi menggunakan Google Sheet

Kaidah Baku untuk Konsistensi Data (PT, Tbk, Pty., & Ltd.)

Besar Pajak Tahunan Honda Versa 2016 di Tahun 2022

Ketika Pengelola Basis Data Terabaikan

Eliminasi Gauss-Jordan untuk Invers Matrix dengan Java

Menyikapi Ucapan AI Pejabat