Persönliche Dankeschön-Zertifikate an Mitarbeiter senden

Codierungslevel: Anfänger
Dauer: 15 Minuten
Projekttyp: Automatisierung mit einem benutzerdefinierten Menü

Lernziele

  • Informieren Sie sich über die Funktionsweise der Lösung.
  • Informationen zu den Aufgaben der Apps Script-Dienste in der Lösung
  • die Umgebung einrichten
  • Richten Sie das Script ein.
  • Führen Sie das Skript aus.

Informationen zu dieser Lösung

Sie können die Vorlage für Mitarbeiterzertifikate in Google Präsentationen automatisch mit Mitarbeiterdaten in Google Tabellen anpassen und die Zertifikate dann über Gmail senden.

Mitarbeiterzertifikat erstellen

Funktionsweise

Das Script verwendet die Präsentationsvorlage „Employee Certificate“ (Mitarbeiterzertifikat) aus Google Präsentationen und eine Tabellenkalkulation mit den Mitarbeiterdetails. Das Script kopiert die Vorlage und ersetzt die Platzhalter durch Daten aus der Tabelle. Nachdem das Script eine Folie für jeden Mitarbeiter erstellt hat, wird jede einzelne Folie als PDF-Anhang extrahiert und an die Mitarbeiter gesendet.

Apps Script-Dienste

Für diese Lösung werden die folgenden Dienste verwendet:

  • Drive-Dienst: Die Vorlage für Mitarbeiterzertifikate in Google Präsentationen wird kopiert.
  • Tabellendienst: Hier finden Sie die Mitarbeiterdetails und der Status wird für jeden aufgeführten Mitarbeiter aktualisiert.
  • Google Präsentationen: Ersetzt die Platzhalter in der Präsentation durch die Mitarbeiterdaten aus der Tabelle.
  • Gmail-Dienst: Die einzelnen Folien werden als PDFs abgerufen und an die Mitarbeiter gesendet.

Vorbereitung

Für die Verwendung dieses Beispiels sind die folgenden Voraussetzungen erforderlich:

  • Ein Google-Konto (für Google Workspace-Konten ist möglicherweise die Administratorzustimmung erforderlich).
  • Einen Webbrowser mit Internetzugriff.

Umgebung einrichten

  1. Klicken Sie auf die folgende Schaltfläche, um eine Kopie der Vorlage für Mitarbeiterzertifikate in Google Präsentationen zu erstellen.
    Kopie erstellen

  2. Notieren Sie sich die Präsentations-ID für den nächsten Schritt. Sie finden die ID in der URL:

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

  3. Erstellen Sie in Drive einen neuen Ordner für die Zertifikate.

  4. Notieren Sie sich die Ordner-ID für den nächsten Schritt. Sie finden die ID in der URL: https://drive.google.com/drive/folders/FOLDER_ID

Script einrichten

  1. Klicken Sie auf die Schaltfläche unten, um eine Kopie der Beispieltabelle Personalzertifikate zu erstellen. Das Apps Script-Projekt für diese Lösung ist an die Tabelle angehängt.
    Kopie erstellen

  2. Öffnen Sie in der Tabelle das Apps Script-Projekt, indem Sie auf Erweiterungen > Apps Script klicken.

  3. Ersetzen Sie in der Variable slideTemplateId den Platzhalter PRESENTATION_ID durch die ID Ihrer Präsentation.

  4. Ersetzen Sie in der Variable tempFolderId den Platzhalter FOLDER_ID durch die ID Ihres Ordners.

  5. Klicken Sie auf „Speichern“ Symbol „Speichern“.

Skript ausführen

  1. Kehren Sie zur Tabelle zurück und klicken Sie auf Wertschätzung > Zertifikate erstellen. Möglicherweise müssen Sie die Seite aktualisieren, damit dieses benutzerdefinierte Menü angezeigt wird.
  2. Autorisieren Sie das Script, wenn Sie dazu aufgefordert werden. Wenn auf dem OAuth-Zustimmungsbildschirm die Warnung Diese App ist nicht bestätigt angezeigt wird, wählen Sie Erweitert > Zu {Project Name} (unsicher) aus.

  3. Klicken Sie noch einmal auf Wertschätzung > Zertifikate erstellen.

  4. Sobald die Statusspalte aller Zeilen auf Erstellt aktualisiert wurde, klicken Sie auf Zertifizierungen senden > Zertifizierungen senden.

Code ansehen

Wenn Sie den Apps Script-Code für diese Lösung ansehen möchten, klicken Sie unten auf Quellcode ansehen:

Quellcode ansehen

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

Beitragende

Dieses Beispiel wurde von Sourabh Choraria, Blogger und Google Developer Expert, erstellt.

Dieses Beispiel wird von Google mithilfe von Google Developer Experts verwaltet.

Nächste Schritte