Persönliche Dankeschön-Zertifikate an Mitarbeiter senden

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

Ziele

  • Verstehen, was die Lösung tut
  • Verstehen, wie die Apps Script-Dienste in der Lösung funktionieren
  • Umgebung einrichten
  • Das Script einrichten
  • Das Script ausführen.

Informationen zu dieser Lösung

Die Google Präsentationen-Vorlage für Mitarbeiterzertifikate wird automatisch mit Mitarbeiterdaten aus Google Sheets angepasst und die Zertifikate werden dann mit Gmail gesendet.

Automatisierter Prozess zum Erstellen von Mitarbeiterzertifikaten

Funktionsweise

Das Script verwendet die Präsentationsvorlage für Mitarbeiterzertifikate aus Google Präsentationen und eine Google Sheets-Tabelle mit den Mitarbeiterdetails. Das Script kopiert die Vorlage und ersetzt die Platzhalter durch Daten aus der Tabelle. Sobald das Script eine Folie für jeden Mitarbeiter erstellt hat, wird jede einzelne Folie als PDF-Anhang extrahiert und die Zertifikate werden an die Mitarbeiter gesendet.

Apps Script-Dienste

Diese Lösung verwendet die folgenden Dienste:

  • Google Drive-Dienst: Kopiert die Präsentationen-Vorlage für Mitarbeiterzertifikate.
  • Tabellendienst: Stellt die Mitarbeiterdetails bereit und aktualisiert den Status für jeden aufgeführten Mitarbeiter.
  • Präsentationen-Dienst: Ersetzt die Platzhalter in der Präsentation durch die Mitarbeiterdaten aus der Tabelle.
  • Gmail-Dienst: Ruft die einzelnen Folien als PDFs ab und sendet sie an die Mitarbeiter.

Vorbereitung

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

  • Ein Google-Konto (für Google Workspace-Konten ist möglicherweise die Genehmigung durch den Administrator erforderlich)
  • Ein Webbrowser mit Internetzugriff

Umgebung einrichten

  1. Klicken Sie auf die folgende Schaltfläche, um eine Kopie der Präsentationen-Vorlage Mitarbeiterzertifikate zu erstellen.

Kopie erstellen

  1. Notieren Sie sich die Präsentations-ID für einen späteren Schritt. Sie finden die ID in der URL:

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

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

  3. Notieren Sie sich die Ordner-ID für einen späteren Schritt. Sie finden die ID in der URL: https://drive.google.com/drive/folders/FOLDER_ID

Das Script einrichten

  1. Klicken Sie auf die folgende Schaltfläche, um eine Kopie der Google Sheets-Beispieltabelle Mitarbeiterzertifikate 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 Variablen slideTemplateId den Platzhalter PRESENTATION_ID durch die ID Ihrer Präsentation.

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

  5. Klicken Sie auf „Speichern“ Symbol „Speichern“ im Apps Script-Editor.

Das Script ausführen

  1. Wechseln Sie zurück zur Tabelle und klicken Sie auf Anerkennung > Zertifikate erstellen. Möglicherweise müssen Sie die Seite aktualisieren, damit dieses benutzerdefinierte Menü angezeigt wird.
  2. Autorisieren Sie die Skripts, wenn Sie dazu aufgefordert werden. <<../_snippets/oauth.md>>
  3. Klicken Sie noch einmal auf Anerkennung > Zertifikate erstellen.
  4. Sobald die Statusspalte aller Zeilen auf Erstellt aktualisiert wurde, klicken Sie auf Anerkennung > Zertifikate senden.

Code ansehen

Wenn Sie den Apps Script-Code für diese Lösung ansehen möchten, klicken Sie 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();
  }
}
</section>

Beitragende

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

Dieses Beispiel wird von Google mit Unterstützung von Google Developer Experts verwaltet.

Nächste Schritte