Cara Membuat Sertifikat Otomatis + QR Code dari Spreadsheet (Tanpa Ribet!)

Cara Mudah Membuat Sertifikat Otomatis + QR Code dengan Google Apps Script

Pernahkah Anda mengadakan webinar atau pelatihan di instansi dan merasa pusing saat harus membuat ratusan sertifikat satu per satu? Selain memakan waktu, risiko salah ketik nama atau nomor sertifikat sangatlah besar.

Mungkin Anda pernah mencoba menggunakan add-on langsung dari Google Form. Namun, masalah sering muncul ketika peserta mengisi formulir berkali-kali karena ragu, atau data yang masuk berantakan (huruf kecil semua, typo, dll).

Nah, di Ruang Perpustakaan kali ini, kita akan membahas solusi yang lebih aman dan rapi: Otomasi Sertifikat melalui Google Spreadsheet.

Mengapa Harus Lewat Spreadsheet?

Menggunakan Spreadsheet sebagai jembatan antara data dan sertifikat memiliki beberapa keunggulan:

  1. Data Cleaning: Kita bisa merapikan nama peserta (misalnya mengubah ke Huruf Kapital) sebelum sertifikat dicetak.

  2. Filter Duplikat: Menghapus data peserta yang mengisi formulir lebih dari satu kali.

  3. QR Code Otomatis: Menambahkan fitur keamanan berupa QR Code unik untuk verifikasi keaslian sertifikat.

  4. Tanpa Biaya: Tidak perlu langganan aplikasi pihak ketiga, cukup gunakan fitur bawaan Google Workspace.


Persiapan "Bahan Baku"

Sebelum masuk ke bagian kode, siapkan 3 hal berikut di Google Drive Anda:

1. Database di Google Spreadsheet

Siapkan tabel dengan kolom sebagai berikut:

  • No

  • Nomor Sertifikat

  • Nama (Gunakan format yang rapi)

  • Jabatan dalam Kegiatan

  • Nama Kegiatan

  • Email

  • QR Code (Kolom ini akan kita isi secara otomatis)

2. Template di Google Slides

Buatlah desain sertifikat dengan 2 slide (halaman depan untuk identitas, halaman belakang untuk daftar materi/JP). Gunakan kode panggil atau tag agar sistem tahu di mana harus meletakkan data, contohnya:

  • {{Nomor_Sertifikat}}

  • {{Nama}}

  • {{Jabatan}}

  • {{QR}} (Gunakan kotak gambar sebagai penanda tempat QR Code akan muncul)

3. Folder Penyimpanan

Buat satu folder khusus di Google Drive untuk menampung seluruh hasil sertifikat dalam bentuk PDF.


Langkah-Langkah Eksekusi

  1. Buka Spreadsheet yang berisi data peserta.

  2. Pilih menu Extensions > Apps Script.

  3. Masukkan kode (script) yang berfungsi untuk mengambil data, menghasilkan QR Code melalui API (seperti QuickChart), lalu menempelkannya ke template Google Slides.

  4. Jalankan fungsi (Run), dan lihat folder Google Drive Anda terisi secara otomatis dengan sertifikat yang rapi.



Berikut kodenya :




function generateSertifikatLengkap() {
  // Masukkan URL atau ID di sini
  let rawSlidesId = 'masukkan ID google slide'; 
  let rawFolderId = 'masukkan ID google drive'; 

  // Fungsi pembersih otomatis (RegEx)
  const extractId = (str) => {
    const match = str.match(/[-\w]{25,}/);
    return match ? match[0] : str.trim();
  };

  const TEMPLATE_ID = extractId(rawSlidesId);
  const FOLDER_HASIL_ID = extractId(rawFolderId);
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();
  if (lastRow < 4) return; 
  
  // Mengambil data dari A4 sampai kolom L (indeks 11)
  const data = sheet.getRange("A4:L" + lastRow).getValues(); 
  
  const templateFile = DriveApp.getFileById(TEMPLATE_ID);
  const targetFolder = DriveApp.getFolderById(FOLDER_HASIL_ID);
  
  data.forEach((row, index) => {
    let nomorSertifikat = row[1]; // Kolom B
    let namaPenerima    = row[2]; // Kolom C
    let jabatan         = row[3]; // Kolom D
    
    // PERBAIKAN: Mengambil data QR dari Kolom G (Indeks ke-6)
    // row[0]=A, row[1]=B, row[2]=C, row[3]=D, row[4]=E, row[5]=F, row[6]=G
    let dataQR = row[6]; 

    if (!namaPenerima || namaPenerima === "") return;

    // 1. Buat salinan template
    let tempFile = templateFile.makeCopy(`Proses_${namaPenerima}`, targetFolder);
    let tempDoc = SlidesApp.openById(tempFile.getId());
    let slides = tempDoc.getSlides();
    let halamanDepan = slides[0];

    // 2. Ganti Teks Placeholder
    halamanDepan.replaceAllText('{{NOMOR}}', nomorSertifikat);
    halamanDepan.replaceAllText('{{NAMA}}', namaPenerima);
    halamanDepan.replaceAllText('{{JABATAN}}', jabatan);

    // 3. Generate QR Code menggunakan data dari kolom G
    if (dataQR) {
      try {
        // Konversi data ke string untuk berjaga-jaga jika isinya angka
        let qrContent = encodeURIComponent(dataQR.toString());
        let qrApiUrl = "https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" + qrContent;
        let imageBlob = UrlFetchApp.fetch(qrApiUrl).getBlob();
        
        let shapes = halamanDepan.getShapes();
        let found = false;
        
        for (let shape of shapes) {
          // Pastikan di Google Slides, Alt Text (Description) kotak QR adalah: QR_PLACEHOLDER
          if (shape.getDescription() === 'QR_PLACEHOLDER') {
            shape.replaceWithImage(imageBlob);
            found = true;
            break;
          }
        }
      } catch (e) {
        Logger.log("Gagal memproses QR untuk " + namaPenerima + ": " + e.message);
      }
    }

    tempDoc.saveAndClose();

    // 4. Simpan ke PDF
    let pdfBlob = tempFile.getAs(MimeType.PDF);
    targetFolder.createFile(pdfBlob).setName("Sertifikat_" + namaPenerima + ".pdf");

    // 5. Hapus file Slides sementara
    tempFile.setTrashed(true);
    
    Logger.log("Selesai memproses: " + namaPenerima);
  });

  Browser.msgBox("Proses selesai. PDF telah dibuat di folder tujuan.");
}