Envie certificados de agradecimento personalizados aos funcionários

Nível de programaçã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 no solução.
  • Configurar o ambiente.
  • Configure o script.
  • Execute o script.

Sobre esta solução

Personalize automaticamente o modelo de certificado de funcionário das Apresentações Google com os dados dos funcionários no Planilhas Google e enviar os certificados usando Gmail

Criação de certificado de funcionário

Como funciona

O script usa o modelo de apresentação "Certificado de funcionário" da Apresentações e uma planilha do Planilhas com o funcionário detalhes. O script copia o modelo substitui os espaços reservados por dados da planilha. Assim que o script cria um slide para cada funcionário, extrai cada slide individual como um PDF anexo e envia os certificados para os funcionários.

Serviços do Apps Script

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

  • Serviço do Drive: copia o Funcionário do Slides Modelo de certificado.
  • Serviço de planilha: fornece a detalhes do funcionário e atualiza o status em relação a cada funcionário listado.
  • Serviço Apresentações: substitui o espaços reservados em a apresentação com os dados dos funcionários da planilha.
  • Serviço do Gmail: recebe o slides individuais PDFs e as envia para os funcionários.

Pré-requisitos

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

  • Uma Conta do Google (as contas do Google Workspace podem precisam da 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 dos Certificados de funcionário. Modelo do app Apresentações Google.
    Fazer uma cópia

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

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

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

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

Configurar o script

  1. Clique no botão abaixo para fazer uma cópia do exemplo Certificados de funcionário. planilha. O projeto do Apps Script para este solução está anexada à planilha.
    Fazer uma cópia

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

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

  4. Para a variável tempFolderId, substitua FOLDER_ID pelo ID da sua 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 para atualizar a página para que esse menu personalizado apareça.
  2. Quando solicitado, autorize o script. Se a tela de permissão OAuth exibir o aviso Este app não foi verificado, continue selecionando Avançado > Acesse {Project Name} (não seguro).

  3. Clique em Valorização >. Crie certificados novamente.

  4. Depois que a coluna de status de todas as linhas for atualizada para Created, clique em Agradecimento > Enviar certificados.

Revisar o código

Para revisar o código do Apps Script para esta solução, clique em Veja o 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

Essa amostra foi criada por Sourabh Choraria, blogueira e desenvolvedora do Google Especialista.

Este exemplo é mantido pelo Google com a ajuda de especialistas do Google Developers.

Próximas etapas