Kirim sertifikat apresiasi yang dipersonalisasi kepada karyawan

Level coding: Pemula
Durasi: 15 menit
Jenis project: Otomatisasi dengan menu kustom

Tujuan

  • Pahami fungsi solusi tersebut.
  • Pahami apa yang dilakukan layanan Apps Script dalam solusi tersebut.
  • Menyiapkan lingkungan Anda.
  • Menyiapkan skrip.
  • Jalankan skrip.

Tentang solusi ini

Sesuaikan template Sertifikat Karyawan Google Slide secara otomatis dengan data karyawan di Google Spreadsheet, lalu kirimkan sertifikatnya menggunakan Gmail.

Pembuatan sertifikat karyawan

Cara kerjanya

Skrip ini menggunakan template presentasi Sertifikat Karyawan dari Slide dan spreadsheet Spreadsheet dengan detail karyawan. Skrip akan menyalin {i>template<i} dan menggantinya dengan data dari {i>spreadsheet<i}. Setelah skrip membuat slide untuk setiap karyawan, skrip akan mengekstrak setiap slide sebagai lampiran PDF dan mengirimkan sertifikat tersebut kepada karyawan.

Layanan Apps Script

Solusi ini menggunakan layanan berikut:

  • Layanan Drive–Menyalin template Sertifikat Karyawan Slide.
  • Layanan spreadsheet–Memberikan detail karyawan dan memperbarui status untuk setiap karyawan yang tercantum.
  • Layanan Slide–Mengganti placeholder di presentasi dengan data karyawan dari spreadsheet.
  • Layanan Gmail–Mendapatkan slide individual sebagai PDF dan mengirimkannya ke karyawan.

Prasyarat

Untuk menggunakan contoh ini, Anda memerlukan prasyarat berikut:

  • Akun Google (akun Google Workspace mungkin memerlukan persetujuan administrator).
  • Browser web dengan akses ke internet.

Menyiapkan lingkungan Anda

  1. Klik tombol berikut untuk membuat salinan template Slide Sertifikat karyawan.
    Buat salinan

  2. Catat ID presentasi Anda untuk digunakan di langkah selanjutnya. Anda dapat menemukan ID ini di URL:

    https://docs.google.com/presentation/d/PRESENTATION_ID/edit

  3. Di Drive, buat folder baru untuk menyimpan sertifikat.

  4. Catat ID folder Anda untuk digunakan di langkah berikutnya. Anda dapat menemukan ID di URL: https://drive.google.com/drive/folders/FOLDER_ID

Menyiapkan skrip

  1. Klik tombol di bawah untuk membuat salinan spreadsheet contoh Sertifikat karyawan. Project Apps Script untuk solusi ini dilampirkan ke spreadsheet.
    Buat salinan

  2. Di spreadsheet, buka project Apps Script dengan mengklik Ekstensi > Apps Script.

  3. Untuk variabel slideTemplateId, ganti PRESENTATION_ID dengan ID presentasi Anda.

  4. Untuk variabel tempFolderId, ganti FOLDER_ID dengan ID folder Anda.

  5. Klik Simpan Ikon simpan.

Jalankan skrip:

  1. Kembali ke spreadsheet dan klik Apresiasi > Buat sertifikat. Anda mungkin perlu memuat ulang halaman agar menu kustom ini muncul.
  2. Saat diminta, izinkan skrip. Jika layar izin OAuth menampilkan peringatan, Aplikasi ini tidak diverifikasi, lanjutkan dengan memilih Lanjutan > Buka {Project Name} (tidak aman).

  3. Klik Penghargaan > Buat sertifikat lagi.

  4. Setelah kolom status semua baris diperbarui menjadi Dibuat, klik Apresiasi > Kirim sertifikat.

Meninjau kode

Guna meninjau kode Apps Script untuk solusi ini, klik Lihat kode sumber di bawah:

Melihat kode sumber

Code.gs

solutions/automations/employee-certificate/Code.js
// To learn how to use this script, refer to the documentation:
// https://developers.google.com/apps-script/samples/automations/employee-certificate

/*
Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

const slideTemplateId = 'PRESENTATION_ID';
const tempFolderId = 'FOLDER_ID'; // Create an empty folder in Google Drive

/**
 * Creates a custom menu "Appreciation" in the spreadsheet
 * with drop-down options to create and send certificates
 */
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('Appreciation')
      .addItem('Create certificates', 'createCertificates')
      .addSeparator()
      .addItem('Send certificates', 'sendCertificates')
      .addToUi();
}

/**
 * Creates a personalized certificate for each employee
 * and stores every individual Slides doc on Google Drive
 */
function createCertificates() {
  // Load the Google Slide template file
  const template = DriveApp.getFileById(slideTemplateId);

  // Get all employee data from the spreadsheet and identify the headers
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const values = sheet.getDataRange().getValues();
  const headers = values[0];
  const empNameIndex = headers.indexOf('Employee Name');
  const dateIndex = headers.indexOf('Date');
  const managerNameIndex = headers.indexOf('Manager Name');
  const titleIndex = headers.indexOf('Title');
  const compNameIndex = headers.indexOf('Company Name');
  const empEmailIndex = headers.indexOf('Employee Email');
  const empSlideIndex = headers.indexOf('Employee Slide');
  const statusIndex = headers.indexOf('Status');

  // Iterate through each row to capture individual details
  for (let i = 1; i < values.length; i++) {
    const rowData = values[i];
    const empName = rowData[empNameIndex];
    const date = rowData[dateIndex];
    const managerName = rowData[managerNameIndex];
    const title = rowData[titleIndex];
    const compName = rowData[compNameIndex];

    // Make a copy of the Slide template and rename it with employee name
    const tempFolder = DriveApp.getFolderById(tempFolderId);
    const empSlideId = template.makeCopy(tempFolder).setName(empName).getId();
    const empSlide = SlidesApp.openById(empSlideId).getSlides()[0];

    // Replace placeholder values with actual employee related details
    empSlide.replaceAllText('Employee Name', empName);
    empSlide.replaceAllText('Date', 'Date: ' + Utilities.formatDate(date, Session.getScriptTimeZone(), 'MMMM dd, yyyy'));
    empSlide.replaceAllText('Your Name', managerName);
    empSlide.replaceAllText('Title', title);
    empSlide.replaceAllText('Company Name', compName);

    // Update the spreadsheet with the new Slide Id and status
    sheet.getRange(i + 1, empSlideIndex + 1).setValue(empSlideId);
    sheet.getRange(i + 1, statusIndex + 1).setValue('CREATED');
    SpreadsheetApp.flush();
  }
}

/**
 * Send an email to each individual employee
 * with a PDF attachment of their appreciation certificate
 */
function sendCertificates() {
  // Get all employee data from the spreadsheet and identify the headers
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const values = sheet.getDataRange().getValues();
  const headers = values[0];
  const empNameIndex = headers.indexOf('Employee Name');
  const dateIndex = headers.indexOf('Date');
  const managerNameIndex = headers.indexOf('Manager Name');
  const titleIndex = headers.indexOf('Title');
  const compNameIndex = headers.indexOf('Company Name');
  const empEmailIndex = headers.indexOf('Employee Email');
  const empSlideIndex = headers.indexOf('Employee Slide');
  const statusIndex = headers.indexOf('Status');

  // Iterate through each row to capture individual details
  for (let i = 1; i < values.length; i++) {
    const rowData = values[i];
    const empName = rowData[empNameIndex];
    const date = rowData[dateIndex];
    const managerName = rowData[managerNameIndex];
    const title = rowData[titleIndex];
    const compName = rowData[compNameIndex];
    const empSlideId = rowData[empSlideIndex];
    const empEmail = rowData[empEmailIndex];

    // Load the employee's personalized Google Slide file
    const attachment = DriveApp.getFileById(empSlideId);

    // Setup the required parameters and send them the email
    const senderName = 'CertBot';
    const subject = empName + ', you\'re awesome!';
    const body = 'Please find your employee appreciation certificate attached.' +
    '\n\n' + compName + ' team';
    GmailApp.sendEmail(empEmail, subject, body, {
      attachments: [attachment.getAs(MimeType.PDF)],
      name: senderName
    });

    // Update the spreadsheet with email status
    sheet.getRange(i + 1, statusIndex + 1).setValue('SENT');
    SpreadsheetApp.flush();
  }
}

Kontributor

Contoh ini dibuat oleh Sourabh Choraria, blogger dan Pakar Developer Google.

Contoh ini dikelola oleh Google dengan bantuan Pakar Google Developers.

Langkah berikutnya