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 bewirkt.
  • Informationen zur Funktionsweise der Apps Script-Dienste in der Lösung.
  • die Umgebung einrichten
  • Richten Sie das Skript ein.
  • Führen Sie das Skript aus.

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 über Gmail gesendet.

Erstellung von Mitarbeiterzertifikaten

Funktionsweise

Das Skript verwendet die Präsentationsvorlage „Mitarbeiterzertifikat“ aus Google-Präsentationen und eine Google-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, wird jede einzelne Folie als PDF-Anhang extrahiert und die Zertifikate werden an die Mitarbeiter gesendet.

Apps Script-Dienste

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

  • Drive-Dienst: Kopiert die Vorlage für Mitarbeiterzertifikate in Google-Präsentationen.
  • Tabellendienst: Stellt die Mitarbeiterdetails bereit und aktualisiert den Status für jeden aufgeführten Mitarbeiter.
  • Slides-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 dieses Beispiel müssen die folgenden Voraussetzungen erfüllt sein:

  • 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 Google-Präsentationen-Vorlage Mitarbeiterzertifikate zu erstellen.
    Kopie erstellen

  2. 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

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

  4. 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

Skript einrichten

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

  2. Öffnen Sie das Apps Script-Projekt in der Tabelle, 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. 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 App ist nicht verifiziert angezeigt wird, wählen Sie Erweitert > Zu {Projektname} (unsicher) aus.

  3. Klicken Sie auf Anerkennung > Zertifikate erstellen.

  4. Wenn 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 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 mit Unterstützung von Google Developer Experts verwaltet.

Nächste Schritte