Gửi giấy chứng nhận tri ân dành riêng cho nhân viên

Cấp độ lập trình: Cơ bản
Thời lượng: 15 phút
Loại dự án: Tự động hoá bằng trình đơn tuỳ chỉnh

Mục tiêu

  • Hiểu rõ chức năng của giải pháp.
  • Tìm hiểu chức năng của các dịch vụ Apps Script trong giải pháp này.
  • Thiết lập môi trường.
  • Thiết lập tập lệnh.
  • Chạy tập lệnh.

Thông tin về giải pháp này

Tự động tuỳ chỉnh mẫu Chứng chỉ nhân viên trên Google Trang trình bày với dữ liệu của nhân viên trong Google Trang tính, sau đó gửi các chứng chỉ bằng Gmail.

Tạo chứng chỉ nhân viên

Cách thức hoạt động

Tập lệnh sử dụng mẫu trình bày Chứng chỉ nhân viên từ Trang trình bày và bảng tính Trang tính có thông tin chi tiết về nhân viên. Tập lệnh sẽ sao chép mẫu và thay thế phần giữ chỗ bằng dữ liệu từ bảng tính. Sau khi tạo một trang trình bày cho mọi nhân viên, tập lệnh sẽ trích xuất từng trang trình bày dưới dạng tệp đính kèm PDF và gửi các chứng chỉ cho nhân viên đó.

Dịch vụ Apps Script

Giải pháp này sử dụng các dịch vụ sau:

  • Dịch vụ Drive – Sao chép mẫu Chứng chỉ nhân viên của Google Trang trình bày.
  • Dịch vụ bảng tính – Cung cấp thông tin chi tiết về nhân viên và cập nhật trạng thái của từng nhân viên trong danh sách.
  • Dịch vụ Trang trình bày – Thay thế phần giữ chỗ trong bản trình bày bằng dữ liệu nhân viên trong bảng tính.
  • Dịch vụ Gmail – Lấy các trang trình bày riêng lẻ dưới dạng tệp PDF và gửi cho nhân viên.

Điều kiện tiên quyết

Để sử dụng mẫu này, bạn cần có các điều kiện tiên quyết sau:

  • Tài khoản Google (các tài khoản Google Workspace có thể phải được quản trị viên phê duyệt).
  • Một trình duyệt web có quyền truy cập vào Internet.

Thiết lập môi trường

  1. Hãy nhấp vào nút sau đây để tạo bản sao cho mẫu Chứng chỉ nhân viên của Trang trình bày.
    Tạo bản sao

  2. Ghi lại mã bản trình bày của bạn để sử dụng cho bước sau. Bạn có thể tìm thấy mã nhận dạng trong URL:

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

  3. Trong Drive, hãy tạo một thư mục mới để lưu trữ các chứng chỉ.

  4. Ghi lại mã thư mục của bạn để sử dụng trong bước sau. Bạn có thể tìm thấy mã nhận dạng trong URL: https://drive.google.com/drive/folders/FOLDER_ID

Thiết lập tập lệnh

  1. Nhấp vào nút bên dưới để tạo bản sao của bảng tính mẫu Giấy chứng nhận nhân viên. Dự án Apps Script cho giải pháp này được đính kèm vào bảng tính.
    Tạo bản sao

  2. Trong bảng tính, hãy mở dự án Apps Script bằng cách nhấp vào Tiện ích > Apps Script.

  3. Đối với biến slideTemplateId, hãy thay thế PRESENTATION_ID bằng mã nhận dạng của bản trình bày.

  4. Đối với biến tempFolderId, hãy thay thế FOLDER_ID bằng mã nhận dạng thư mục của bạn.

  5. Nhấp vào biểu tượng Lưu Biểu tượng Lưu.

Chạy tập lệnh

  1. Chuyển trở lại bảng tính rồi nhấp vào Đánh giá > Tạo chứng chỉ. Có thể bạn cần phải làm mới trang để trình đơn tuỳ chỉnh này xuất hiện.
  2. Khi được nhắc, hãy cho phép tập lệnh chạy. Nếu màn hình xin phép bằng OAuth hiển thị cảnh báo, Ứng dụng này chưa được xác minh, hãy tiếp tục bằng cách chọn Nâng cao > Chuyển đến {Project Name} (không an toàn).

  3. Nhấp vào Đánh giá > Tạo chứng chỉ một lần nữa.

  4. Sau khi cập nhật cột trạng thái của tất cả các hàng thành Đã tạo, hãy nhấp vào Cảm ơn > Gửi chứng chỉ.

Xem xét mã

Để xem lại mã Apps Script cho giải pháp này, hãy nhấp vào phần Xem mã nguồn bên dưới:

Xem mã nguồn

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();
  }
}

Người đóng góp

Mẫu này do Sourabh Choraria, người viết blog và Chuyên gia phát triển của Google tạo ra.

Mẫu này được Google duy trì với sự trợ giúp của các chuyên gia nhà phát triển của Google.

Các bước tiếp theo