Persönliche Dankeschön-Zertifikate an Mitarbeiter senden

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

Zielsetzungen

  • Verstehen Sie, was die Lösung bewirkt.
  • Informieren Sie sich darüber, was die Apps Script-Dienste innerhalb der Lösung leisten.
  • die Umgebung einrichten
  • Richten Sie das Skript ein.
  • Führen Sie das Skript aus.

Informationen zu dieser Lösung

Passen Sie die Vorlage für Mitarbeiterzertifikate in Google Präsentationen automatisch mit Mitarbeiterdaten in Google Tabellen an und senden Sie die Zertifikate dann über Gmail.

Mitarbeiterzertifikat erstellen

Funktionsweise

Das Skript verwendet die Präsentationsvorlage für das Mitarbeiterzertifikat von Google Präsentationen und eine Google Tabellen-Tabelle mit den Mitarbeiterdetails. Das Skript kopiert die Vorlage und ersetzt die Platzhalter durch Daten aus der Tabelle. Nachdem das Skript eine Folie für jeden Mitarbeiter erstellt hat, extrahiert es jede einzelne Folie als PDF-Anhang und sendet die Zertifikate an die Mitarbeiter.

Apps Script-Dienste

Diese Lösung verwendet die folgenden Dienste:

  • Drive-Dienst: kopiert die Vorlage für das Mitarbeiterzertifikat von Google Präsentationen.
  • Tabellendienst: Liefert Details zu den Mitarbeitern und aktualisiert den Status für jeden aufgeführten Mitarbeiter.
  • Google Präsentationen-Dienst: Damit werden die Platzhalter in der Präsentation durch die Mitarbeiterdaten aus der Tabelle ersetzt.
  • Gmail-Dienst: Ruft die einzelnen Folien als PDF-Dateien ab und sendet sie an die Mitarbeiter.

Voraussetzungen

Um dieses Beispiel zu verwenden, müssen die folgenden Voraussetzungen erfüllt sein:

  • Ein Google-Konto (für Google Workspace-Konten ist möglicherweise die Administratorgenehmigung erforderlich).
  • Ein Webbrowser mit Zugang zum Internet.

Umgebung einrichten

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

  2. Notieren Sie sich Ihre 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

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

  4. Notieren Sie sich Ihre Ordner-ID. Sie benötigen sie in einem späteren Schritt. Sie finden die ID in der URL: https://drive.google.com/drive/folders/FOLDER_ID

Skript einrichten

  1. Klicken Sie auf die Schaltfläche unten, um eine Kopie der 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. Klicken Sie dazu auf Erweiterungen > Apps Script.

  3. Ersetzen Sie in der Variablen slideTemplateId PRESENTATION_ID durch die ID Ihrer Präsentation.

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

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

Skript 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 das Skript, wenn Sie dazu aufgefordert werden. Wenn auf dem OAuth-Zustimmungsbildschirm die Warnung Diese Anwendung wurde nicht überprüft angezeigt wird, wählen Sie Erweitert > Zu {Projektname} (unsicher) aus.

  3. Klicken Sie auf Anerkennung > Zertifikate erstellen noch einmal.

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

Code ansehen

Klicken Sie unten auf Quellcode anzeigen, um den Apps Script-Code für diese Lösung zu sehen:

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 Expertin erstellt.

Dieses Beispiel wird von Google mit der Unterstützung von Google Developers-Experten gepflegt.

Nächste Schritte