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

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

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

Menyembunyikan Failed Load Images di Blogger

Kebodohan Karyawan Menyalahkan Sistem

Menambahkan Konfirmasi Email di Google Form

Menghapus Baris di Google Sheets yang Memiliki Sel Kosong dengan Apps Script

Kode Apps Script MailApp untuk Form Mengirimkan Email