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

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

Menambah dan Menghapus Baris pada AlbertTable

Tutorial Upload File ke Google Drive dari Website

Kode Apps Script MailApp untuk Form Mengirimkan Email

Menambahkan Random Key sebagai ID Pembeda di Google Sheet dengan Apps Script

Generate Karakter Acak dan Menempatkannya di Sel Google Sheets dengan Apps Script

Apps Script untuk Mengirimkan Notifikasi Approval

Afiliasi Shopee Tanpa Wajah dan Tanpa Beli Sampel Bermodal AI