Full width home advertisement

Post Page Advertisement [Top]

 



Quem tem rotinas de trabalho usando formulários online do Google sabe como é útil a geração de notificações automáticas para os respondentes de determinado formulário. E se esta notificação agregar um pdf contendo os campos que o respondente preencheu, melhor ainda!

Segue-se, abaixo, um tutorial que pode ser adaptado para vários contextos.

EXEMPLO: Uma notificação decorrente do preenchimento de um formulário informando se a pessoa deseja participar da Confraternização de Fim de Ano, e informando se deseja colaborar com a festa levando comida ou bebida para o evento.

PASSO 1 - Criar, no Google Drive, uma pasta (drive) específica para conter o formulário on-line e os demais arquivos


PASSO 2 - Dentro da pasta criada, incluir/criar:
2.1.- O formulário online
2.2.- O template (modelo) da notificação que deverá chegar para os respondentes
2.3 - Uma pasta (um drive dentro do drive criado) para abrigar os pdfs que vão chegar


PASSO 3 - Sobre o arquivo do template da notificação:
►É necessário colocar TAGs para os campos correspondentes do formulário
Ex.: Nome do Participante: {{Nome do Participante}}
O texto que está dentro das chaves duplas deve ser exatamente o nome do campo em questão.

►Compartilhá-lo para que "Qualquer pessoa com o link" possa acessá-lo como "Leitor"
►Copiar o link gerado deste arquivo e colá-lo em um arquivo do Bloco de Notas, por exemplo


PASSO 4 - Sobre a pasta para abrigar os pdfs que vão chegar:
►Acessar esta pasta
►Copiar a URL desta pasta e colá-lo no mesmo arquivo onde se copiou o link gerado do template acima


PASSO 5 - Sobre o formulário online:
►Criar as perguntas e incluir as orientações devidas para os respondentes
►Publicar o formulário, copiar o link gerado deste arquivo e colá-lo no mesmo arquivo onde se copiou o link gerado do template acima


PASSO 6 - Dentro do formulário on-line, ir para a ABA 'Respostas' e criar uma planilha como destino das respostas


PASSO 7 - Dentro da planilha criada, ir para a alternativa EXTENSÕES, do menu horizontal, depois para a opção APPS SCRIPT, e tomar os passos indicados a seguir:



MODELO 1 - Gera, no Drive indicado, somente um arquivo Google Doc que vai replicar o pdf enviado ao respondente
  
function onFormSubmit(e) {
  // 1. Definir IDs e e-mail do respondente
  var docTemplateId = 'ID-do-Template'; // O ID do template é descrito na URL deste arquivo, e refere-se ao código alfanumérico entre as partes /d/ e /edit
  var folderId = 'ID-da-pasta-que-abrigará-osarquivos-das-notificações'; // O ID da pasta é o código que fica na URL da pasta após a parte /folders/
  var emailRecipient = e.namedValues['Endereço de e-mail']; // Já está no padrão

  // 2. Obter a linha de dados mais recente
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = e.range;
  var row = range.getRow();
  var allData = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues();
  var data = allData[0];
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var name = e.namedValues['Nome Completo'];
  var mrec = e.namedValues['Modalidade da Contribuição'];
                ? e.namedValues['Modalidade da Contribuição'][0].trim() 
               : '';

  var sigla = ''; // Variável que receberá "C" ou "B"

  // Estrutura condicional para definir a sigla
  if (sele === 'Comida') {
    sigla = 'C';
  } else if (sele === 'Bebida') {
    sigla = 'B';
  } else {
    sigla = ''; // Ou outro valor padrão, caso não seja nenhum dos dois
  }

  // 3. Criar uma cópia do modelo e preencher
  var copyFile = DriveApp.getFileById(docTemplateId).makeCopy('Confirmação de presença - ' + name[0] + '__' + sigla[0] + '.pdf'); // Use um nome de arquivo único
  var copyDoc = DocumentApp.openById(copyFile.getId());
  var copyBody = copyDoc.getBody();

  // Substituir os marcadores no modelo pelas respostas reais
  for (var i = 0; i < headers.length; i++) {
    copyBody.replaceText('{{' + headers[i] + '}}', data[i]);
  }
  
  // 4. Salvar e converter para PDF
  copyDoc.saveAndClose();
  var pdfBlob = copyFile.getAs(MimeType.PDF);
  
  // Mover o PDF para a pasta desejada (opcional)
  var folder = DriveApp.getFolderById(folderId);
  folder.addFile(copyFile); // Adiciona na pasta
  DriveApp.getRootFolder().removeFile(copyFile); // Remove da raiz (se a cópia foi feita lá)

  // 5. Enviar o e-mail com o anexo
  var subject = 'Confirmação de presença - ' + name[0] + '__' + sigla;
  var body = "Valeu pela sua confirmação e colaboração para a nossa Festa!\n\nAtenciosamente,\nComissão Organizadora da Festa";
  
  GmailApp.sendEmail(emailRecipient, subject, body, {
    attachments: [pdfBlob.setName('Confirmação de presença - ' + name[0] + '__' + sigla + '.pdf')]
  });
}



MODELO 2 - Gera, no Drive indicado, dois arquivos: um arquivo Google Doc e outro PDF, ambos com teor idêntico ao pdf enviado ao respondente
  
    function onFormSubmit(e) {
  // 1. Definir IDs e e-mail do respondente
  var docTemplateId = '1JK8H7tZnOKWWQNXYz80ZaNJSEf5rclEOl-UumRRF3Eo'; // Substitua pelo ID do seu Google Doc modelo
  var folderId = '19hvRwCMZL6gXdw8Z7tz4XnppGgs17BjJ'; // Substitua pelo ID da pasta onde deseja salvar os arquivos gerados
  var emailRecipient = e.namedValues['Endereço de e-mail'][0]; // Substitua 'Endereço de e-mail' pelo título exato da coluna de e-mail na sua planilha

  // 2. Obter a linha de dados mais recente
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = e.range;
  var row = range.getRow();
  var allData = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues();
  var data = allData[0];
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];

  // Obter valores dos campos do formulário (simplificado com namedValues, se disponíveis)
  var name = e.namedValues['Nome Completo'];
  var mrec = e.namedValues['Modalidade da Contribuição'];
                ? e.namedValues['Modalidade da Contribuição'][0].trim() 
               : '';

  var sigla = ''; // Variável que receberá "C" ou "B"

  // Estrutura condicional para definir a sigla
  if (sele === 'Comida') {
    sigla = 'C';
  } else if (sele === 'Bebida') {
    sigla = 'B';
  } else {
    sigla = 'N'; // Ou outro valor padrão, caso não seja nenhum dos dois
  }

  // --- MODIFICAÇÃO PRINCIPAL ---
  // A primeira coluna (índice 0) é o carimbo de data/hora.
  var timestamp = data[0]; 

  // Formata a data/hora para o formato brasileiro (ex: 25 de Novembro de 2025 às 23:25)
  // Use 'GMT-03:00' ou o fuso horário correto da sua planilha/região, se diferente.
  var formattedDate = Utilities.formatDate(timestamp, "GMT-03:00", "dd 'de' MMMM 'de' yyyy 'às' HH:mm");
  
  // Para fins de nome de arquivo, uma data mais simples (dd-MM-yyyy HH-mm) é melhor
  var simpleFormattedDate = Utilities.formatDate(timestamp, "GMT-03:00", "dd-MM-yyyy HH-mm");
  // -----------------------------

  // Definir um nome base único para ambos os arquivos usando a data simples
  var baseFileName = lp + '__' + sigla + '-' + iarea + '__' + name + '__' + mrec + '__' + simpleFormattedDate;
  var folder = DriveApp.getFolderById(folderId);

  // 3. Criar uma cópia do modelo (como Google Doc) e preencher
  var copyFile = DriveApp.getFileById(docTemplateId).makeCopy(baseFileName + '.doc', folder); // Salva a cópia do DOC diretamente na pasta
  var copyDoc = DocumentApp.openById(copyFile.getId());
  var copyBody = copyDoc.getBody();

  // Substituir os marcadores no modelo pelas respostas reais
  for (var i = 0; i < headers.length; i++) {
    // Se for o carimbo de data/hora, use a versão formatada para o corpo do documento.
    if (headers[i] === 'Carimbo de data/hora') { // Substitua 'Carimbo de data/hora' pelo nome exato do cabeçalho da data na sua planilha
      copyBody.replaceText('{{' + headers[i] + '}}', formattedDate || '');
    } else {
      copyBody.replaceText('{{' + headers[i] + '}}', data[i] || ''); // Usa '' se o valor for nulo
    }
  }

  // 4. Salvar o Google Doc e gerar o PDF
  copyDoc.saveAndClose(); // Gerar o blob do PDF a partir do Google Doc preenchido
  var pdfBlob = copyFile.getAs(MimeType.PDF);
  pdfBlob.setName(baseFileName + '.pdf'); // Define o nome do arquivo PDF

  // NOTA: O arquivo .doc já está salvo na pasta de destino (linha 47)
  // Agora criamos o arquivo PDF na mesma pasta
  folder.createFile(pdfBlob);

  // 5. Enviar o e-mail com o anexo (o PDF)
  var subject = 'Confirmação de presença - ' + name[0] + '__' + sigla;
  var body = "Valeu pela sua confirmação e colaboração para a nossa Festa!\n\nAtenciosamente,\nComissão Organizadora da Festa";
  
  GmailApp.sendEmail(emailRecipient, subject, body, {
    attachments: [pdfBlob], // Anexa o blob do PDF
    name: 'Confirmação de presença - ' + name[0] + '__' + sigla + '.pdf'
  });
}
  


PASSO 8 - Na parte do ACIONADOR, convém estabelecer o padrão mostrado na imagem a seguir:



Após os passos acima, fechar a planilha e fazer testes de preenchimento para, se necessário, aprimorar o Script.

Há uma outra forma de notificação, diretamente no corpo do e-mail, e o tutorial para esta modalidade pode ser visto neste vídeo. Entretanto, apesar de ver que funciona, não consegui tornar a imagem que estava no template visível no corpo do e-mail do respondente.

Karen Rachel

Print or Generate PDF

Nenhum comentário:

Postar um comentário

Bottom Ad [Post Page]

| Designed by Colorlib