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

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

Peringatan: Aksi Penipuan Skimming Melalui Aplikasi Android M-Pajak

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Kebodohan Karyawan Menyalahkan Sistem

Kumpulan Source Code Greenfoot

Apps Script untuk Mengirimkan Notifikasi Approval

Ketika Pengelola Basis Data Terabaikan

Menyembunyikan Failed Load Images di Blogger

Menyikapi Ucapan AI Pejabat