Envoyez des certificats d'appréciation personnalisés aux employés

Niveau de codage: Débutant
Durée: 15 minutes
Type de projet: automatisation avec un menu personnalisé

Objectifs

  • Comprendre ce que fait la solution.
  • Vous connaissez le fonctionnement des services Apps Script dans le solution.
  • configurer votre environnement ;
  • Configurez le script.
  • Exécutez le script.

À propos de cette solution

Personnaliser automatiquement le modèle de certificat des employés Google Slides avec les données des employés dans Google Sheets, puis envoyez les certificats en utilisant Gmail

Création de certificats d'employés

Fonctionnement

Le script utilise le modèle de présentation de certificat d'employé de Des diapositives et une feuille de calcul Sheets avec l'employé plus de détails. Le script copie le modèle et remplace les espaces réservés par les données de la feuille de calcul. Une fois que le script crée une diapositive pour chaque employé, extrait chaque diapositive au format PDF. pièce jointe et envoie les certificats aux employés.

Services Apps Script

Cette solution utilise les services suivants:

  • Service Drive : copie le fichier Employé Slides Modèle de certificat.
  • Service Spreadsheet : fournit les informations sur les employés et met à jour le statut pour chaque employé répertorié.
  • Service Slides : remplace le des espaces réservés dans la présentation avec les données des employés provenant de la feuille de calcul.
  • Service Gmail : récupère le diapositives individuelles en tant que PDF et les envoie aux employés.

Prérequis

Pour utiliser cet exemple, vous devez remplir les conditions préalables suivantes:

  • Un compte Google (les comptes Google Workspace peuvent nécessitent l'approbation d'un administrateur).
  • Un navigateur Web ayant accès à Internet

Configurer votre environnement

  1. Cliquez sur le bouton suivant pour créer une copie des Certificats d'employé. Modèle Slides.
    Créer une copie

  2. Notez votre ID de présentation, car vous en aurez besoin lors d'une prochaine étape. Vous pouvez recherchez l'ID dans l'URL:

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

  3. Dans Drive, créez un dossier pour stocker les certificats.

  4. Notez l'ID de votre dossier, car vous en aurez besoin lors d'une prochaine étape. Vous trouverez ID dans l'URL: https://drive.google.com/drive/folders/FOLDER_ID

Configurer le script

  1. Cliquez sur le bouton ci-dessous pour faire une copie de l'exemple de certificats pour les employés feuille de calcul. Le projet Apps Script pour cet est jointe à la feuille de calcul.
    Créer une copie

  2. Dans la feuille de calcul, ouvrez le projet Apps Script en cliquant sur Extensions > Apps Script.

  3. Pour la variable slideTemplateId, remplacez PRESENTATION_ID par l'ID de votre présentation.

  4. Pour la variable tempFolderId, remplacez FOLDER_ID. par l'identifiant de votre dossier.

  5. Cliquez sur Enregistrer Icône Enregistrer.

Exécuter le script

  1. Revenez à la feuille de calcul et cliquez sur Appréciation. > Créer des certificats. Vous aurez peut-être besoin pour actualiser la page afin que ce menu personnalisé s'affiche.
  2. Lorsque vous y êtes invité, autorisez le script. Si l'écran de consentement OAuth affiche l'avertissement Cette application n'est pas validée, cliquez sur Avancé > pour continuer. Accédez à {Project Name} (non sécurisé).

  3. Cliquez sur Appréciation > Créez des certificats à nouveau.

  4. Une fois que la colonne d'état de toutes les lignes indique Created (Créé), cliquez sur Reconnaissance > Envoyer des certificats.

Examiner le code

Pour examiner le code Apps Script de cette solution, cliquez sur Consultez le code source ci-dessous:

Afficher le code source

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

Contributeurs

Cet exemple a été créé par Sourabh Choraria, blogueur et développeur Google Expert.

Cet échantillon est géré par Google avec l'aide d'Experts Google Developers.

Étapes suivantes