Envie certificados de agradecimento personalizados aos funcionários

Nível de codificação: iniciante
Duração: 15 minutos
Tipo de projeto: automação com um menu personalizado

Objetivos

  • Entenda o que a solução faz.
  • Entenda o que os serviços do Apps Script fazem na solução.
  • Prepare o ambiente.
  • Configure o script.
  • Execute o script.

Sobre esta solução

Personalize automaticamente o modelo de certificado de funcionário do Google Slides com dados de funcionários nas Planilhas Google e envie os certificados usando o Gmail.

Criação de certificado de funcionário

Como funciona

O script usa o modelo de apresentação de certificado de funcionário dos Slides e uma planilha do Sheets com os detalhes do funcionário. O script copia o modelo e substitui os marcadores de posição pelos dados da planilha. Depois que o script cria um slide para cada funcionário, ele extrai cada slide individual como um anexo em PDF e envia os certificados aos funcionários.

Serviços do Apps Script

Esta solução usa os seguintes serviços:

  • Serviço do Drive: copia o modelo de certificado de funcionário do Apresentações.
  • Serviço de planilha: fornece os detalhes do funcionário e atualiza o status de cada funcionário listado.
  • Serviço de slides: substitui os marcadores de posição na apresentação pelos dados do funcionário da planilha.
  • Serviço do Gmail: extrai os slides individuais como PDFs e os envia aos funcionários.

Pré-requisitos

Para usar este exemplo, você precisa dos seguintes pré-requisitos:

  • Uma Conta do Google (as contas do Google Workspace podem exigir a aprovação do administrador).
  • Um navegador da Web com acesso à Internet.

Configurar o ambiente

  1. Clique no botão a seguir para fazer uma cópia do modelo de slides Certificados de funcionários.
    Fazer uma cópia

  2. Anote o ID da apresentação para usar em uma etapa posterior. Você pode encontrar o ID no URL:

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

  3. No Drive, crie uma nova pasta para armazenar os certificados.

  4. Anote o ID da pasta para usar em uma etapa posterior. Você pode encontrar o ID no URL: https://drive.google.com/drive/folders/FOLDER_ID

Configurar o script

  1. Clique no botão abaixo para fazer uma cópia da planilha de exemplo de Certificados de funcionários. O projeto do Apps Script para essa solução é anexado à planilha.
    Fazer uma cópia

  2. Na planilha, abra o projeto do Apps Script clicando em Extensões > Apps Script.

  3. Para a variável slideTemplateId, substitua PRESENTATION_ID pelo ID da apresentação.

  4. Para a variável tempFolderId, substitua FOLDER_ID pelo ID da pasta.

  5. Clique em Salvar Ícone "Salvar".

Executar o script

  1. Volte para a planilha e clique em Agradecimento > Criar certificados. Talvez seja necessário atualizar a página para que esse menu personalizado apareça.
  2. Quando solicitado, autorize o script. Se a tela de consentimento do OAuth mostrar o aviso Este app não está verificado, continue selecionando Avançado > Acessar {Project Name} (inseguro).

  3. Clique em Agradecimento > Criar certificados novamente.

  4. Quando a coluna de status de todas as linhas for atualizada para Criado, clique em Agradecimento > Enviar certificados.

Revisar o código

Para revisar o código do Apps Script para essa solução, clique em Ver código-fonte abaixo:

Acessar o código-fonte

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

Colaboradores

Este exemplo foi criado por Sourabh Choraria, blogueiro e especialista em desenvolvimento do Google.

Esse exemplo é mantido pelo Google com a ajuda de especialistas em desenvolvimento do Google.

Próximas etapas