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

Review Pengguna yang Berperilaku Konsumtif

Ijazah lebih Penting Dibanding Skill

TPlanning 3.1 untuk Optimasi Dosis Paparan Radioterapi

Sedikit Tahu mengenai Pendaftaran Haji Tahun 2017

Membuat Kalkulator Interpolasi Bilinear dengan Javascript

Bagaimana Mendapatkan Penghasilan dari Aplikasi Android

Eliminasi Gauss-Jordan untuk Invers Matrix dengan Java

Apakah Kuliah untuk Bekerja

Game TicTacToe dengan Greenfoot

Menambahkan reCAPTCHA v2 pada Login Form