Invia certificati di apprezzamento personalizzati ai dipendenti

Livello di programmazione: principiante
Durata: 15 minuti
Tipo di progetto: Automazione con un menu personalizzato

Obiettivi

  • Scopri cosa fa la soluzione.
  • Scoprire cosa fanno i servizi Apps Script con questa soluzione.
  • Configurare l'ambiente.
  • Configura lo script.
  • Esegui lo script.

Informazioni su questa soluzione

Personalizza automaticamente il modello di certificato per i dipendenti di Presentazioni Google con i dati dei dipendenti in Fogli Google, quindi invia i certificati utilizzando Gmail.

Creazione del certificato dipendente

Come funziona

Lo script utilizza il modello di presentazione del certificato dipendente di Presentazioni e un foglio di lavoro Fogli con i dettagli del dipendente. Lo script copia il modello e sostituisce i segnaposto con i dati del foglio di lavoro. Una volta creata una slide per ogni dipendente, lo script estrae ogni singola slide come allegato PDF e invia i certificati ai dipendenti.

Servizi Apps Script

Questa soluzione utilizza i seguenti servizi:

  • Servizio Drive: copia il modello di certificato dei dipendenti di Presentazioni.
  • Servizio fogli di lavoro: fornisce i dettagli del dipendente e aggiorna lo stato rispetto a ogni dipendente incluso nell'elenco.
  • Servizio Presentazioni: sostituisce i segnaposto nella presentazione con i dati dei dipendenti del foglio di lavoro.
  • Servizio Gmail: ottiene le singole slide come PDF e le invia ai dipendenti.

Prerequisiti

Per utilizzare questo esempio, devi disporre dei seguenti prerequisiti:

  • Un Account Google (gli account Google Workspace potrebbero richiedere l'approvazione dell'amministratore).
  • Un browser web con accesso a Internet.

Configura l'ambiente

  1. Fai clic sul pulsante seguente per creare una copia del modello di Presentazioni Certificati dipendenti.
    Crea una copia

  2. Prendi nota dell'ID presentazione per utilizzarlo in un passaggio successivo. Puoi trovare l'ID nell'URL:

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

  3. In Drive, crea una nuova cartella in cui inserire i certificati.

  4. Prendi nota dell'ID cartella per utilizzarlo in un passaggio successivo. Puoi trovare l'ID nell'URL: https://drive.google.com/drive/folders/FOLDER_ID

Configura lo script

  1. Fai clic sul pulsante in basso per creare una copia del foglio di lavoro di esempio di Certificati dipendente. Il progetto Apps Script per questa soluzione è allegato al foglio di lavoro.
    Crea una copia

  2. Nel foglio di lavoro, apri il progetto Apps Script facendo clic su Estensioni > Apps Script.

  3. Per la variabile slideTemplateId, sostituisci PRESENTATION_ID con l'ID della presentazione.

  4. Per la variabile tempFolderId, sostituisci FOLDER_ID con l'ID della tua cartella.

  5. Fai clic su Salva Icona Salva.

Esegui lo script

  1. Torna al foglio di lavoro e fai clic su apprezzamento > Crea certificati. Potresti dover aggiornare la pagina per visualizzare questo menu personalizzato.
  2. Quando richiesto, autorizza lo script. Se nella schermata per il consenso OAuth viene visualizzato l'avviso Questa app non è verificata, continua selezionando Avanzate > Vai a {Nome progetto} (non sicuro).

  3. Fai clic su apprezzamento > di nuovo Crea certificati.

  4. Una volta che la colonna dello stato di tutte le righe è stata aggiornata a Creata, fai clic su Punteggio > Invia certificati.

Rivedi il codice

Per esaminare il codice di Apps Script per questa soluzione, fai clic su Visualizza codice sorgente qui sotto:

Visualizza codice sorgente

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

Collaboratori

Questo campione è stato creato da Sourabh Choraria, blogger ed esperta di Google Developer.

Questo campione è gestito da Google con l'aiuto degli Esperti Google Developers.

Passaggi successivi