Envio de e-mail do Planilhas Google após a atualização de uma célula do Formulários Google

Freeman

Olá, atualmente tenho este código para enviar um e-mail:

function sendNotification(e){
  
if(e.range.getColumn()==4 && e.value=='Air Filter'){
 var recipients = "[email protected]";
 var subject = "Update on "+e.range.getSheet().getName();
 var body = "Air filter 50751-123 needs ordered for the Hurco"
 MailApp.sendEmail(recipients, subject, body)
 }
  
if(e.range.getColumn()==4 && e.value=='Coolant'){
 var recipients = "[email protected]"&&"[email protected]";
 var subject = "Update on "+e.range.getSheet().getName();
 var body = "Coolant is needed for the Hurco"
 MailApp.sendEmail(recipients, subject, body)
 
}  
  
}

Minha pergunta é, quando um Formulário Google é enviado para minha Planilha Google, uma determinada palavra é enviada para uma determinada coluna, quero que o Google envie um e-mail para o (s) destinatário (s) necessário (s).

Eu o faço funcionar quando vou fisicamente para a planilha e edito a coluna, mas quero que funcione quando um formulário é inserido. (isso só funciona quando eu tenho o gatilho para onEdit, quando está em onChange, recebo um erro de "TypeError: não é possível chamar o método" getColumn "de undefined. (linha 3, arquivo" Email Notif ")")

A coluna que estará procurando terá 4 palavras diferentes que ela poderia procurar, e cada palavra pode estar vinculada a destinatários diferentes. "Filtro de ar" vai para uma pessoa, enquanto "Refrigerante" vai para duas pessoas diferentes.

Obrigado

dwmorrin

Para enviar um e-mail quando um formulário é enviado, você precisa usar o gatilho instalável "envio no formulário" .

O código deve ser atualizado para usar as propriedades corretas do evento . Você estava usando a .valuepropriedade do evento "on edit" , mas o evento "on form submit" tem .values, que é uma matriz de valores, ou .namedValuesque é um objeto onde as perguntas do formulário são as chaves (ou seja, os cabeçalhos das colunas da folha de resposta) .

O intervalo será o envio do formulário, portanto, não há muito sentido em verificar o intervalo da coluna 4 como você precisava fazer para um evento de edição.

function sendNotification(e) {
  var recipients = "[email protected]";
  var subject = "Update on " + e.range.getSheet().getName();
  var body = "";
  if (e.namedValues["Item that is needed."] == 'Air Filter') {
    body = "Air filter 50751-123 needs ordered for the Hurco";
  } else if (e.namedValues["Item that is needed."] == 'Coolant') {
    recipients += ",[email protected]";
    body = "Coolant is needed for the Hurco";
  }
  if (body.length > 0) {
    MailApp.sendEmail(recipients, subject, body);
  }
}

Editar:

Conforme solicitado no comentário, uma atualização para incluir a verificação do envio anterior de duplicatas, com base nos números das colunas selecionadas.

function sendNotification(e) {
  var recipients = "[email protected]";
  var subject = "Update on " + e.range.getSheet().getName();
  var body = "";
  if (checkForSameSubmission(e, 24, [2, 3])) { // event, hours to look back, columns to check (zero index!)
    subject += " DUPLICATE";
    body += "WARNING: DUPLICATE!\n";
  }
  if (e.namedValues["Item that is needed."] == 'Air Filter') {
    body += "Air filter 50751-123 needs ordered for the Hurco";
  } else if (e.namedValues["Item that is needed."] == 'Coolant') {
    recipients += ",[email protected]";
    body += "Coolant is needed for the Hurco";
  }
  if (body.length > 0) {
    MailApp.sendEmail(recipients, subject, body);
  }
}

// JSON.stringify will let us compare array values as strings
function checkForSameSubmission(event, hours) {
  var sheetData = event.range.getSheet().getDataRange().getValues();
  sheetData.shift(); // remove header row
  sheetData.pop(); // remove just submitted row
  var byColumns = function (_, index) { // for Array.prototype.filter
    return columns.indexOf(index) > -1;
  }
  var toStrings = function (value) { // for Array.prototype.map
    return String(value); // ensure all numbers become strings for final comparison
  };
  var thisSubmissionData = JSON.stringify(event.values.filter(byColumns).map(toStrings));
  var isSameSubmission = function (dataRow) {
    return thisSubmissionData === JSON.stringify(dataRow.filter(byColumns).map(toStrings));
  }
  return checkPreviousDataByHours(hours, sheetData, isSameSubmission);
}

function checkPreviousDataByHours(hours, data, someCallback) {
  var minusHours = Date.now() - 1000*60*60*hours;
  var lastHoursData = data.filter(function (row) { return +row[0] > minusHours; });
  return lastHoursData.some(someCallback);
}

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Faixa de envio do Planilhas Google como e-mail

Como o Google Agenda atualiza o conteúdo de um e-mail APÓS o envio?

scripts de planilhas do google e formulários do google

Planilhas do Google. Faça algo quando a célula contiver endereço de e-mail

Intervalo de envio de planilhas do Google por e-mail (com ou sem formatação) como uma tabela HTML em uma mensagem do Gmail

Como excluir e-mail após importação de anexo .csv para planilhas do Google

Como excluir e-mail após importação de anexo .csv para planilhas do Google

Envio de respostas do Formulários Google para o endereço de e-mail especificado ao enviar

Enviar e-mail com base na mudança de célula em planilhas do google

Extração de dados de uma planilha do Google ativa e envio por e-mail

Chame showSidebar () de uma célula nas planilhas do Google

Scripts do Planilhas Google, data IF de uma célula

Envio recorrente por e-mail de planilhas do Google atualizadas

Movendo o conteúdo de uma célula com script de aplicativo nas planilhas do Google

Armazenar uma série de datas em uma célula de planilhas do Google

Existe uma maneira de obter o `Texto do título` da célula do Planilhas Google?

Copie o conteúdo de uma célula do Planilhas para um Google Sites

Copie o conteúdo de uma célula do Planilhas para um Google Sites

Obtendo as horas de uma célula de tipo de duração em planilhas do Google

Envio de uma notificação por e-mail do Google Sites

Atualizar o campo do Formulários Google com base em dados dinâmicos de uma planilha do Planilhas Google

Envio de e-mails para endereços de e-mail separados com base no conteúdo da célula em um Formulário Google

Como separar o texto em uma célula de planilhas do Google por letras maiúsculas

Acione o editor de script quando uma célula específica for alterada (planilhas do Google)

A saída do Formulários Google no Planilhas, combinada com a fórmula, pula uma célula

Enviando código QR do Planilhas Google para o endereço de e-mail

Enviando código QR do Planilhas Google para o endereço de e-mail

O texto de formatação condicional do Planilhas Google em uma célula afeta outra célula

Planilhas do Google. Extraia uma lista de endereços de e-mail que estão em uma planilha

TOP lista

quentelabel

Arquivo