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
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 .value
propriedade do evento "on edit" , mas o evento "on form submit" tem .values
, que é uma matriz de valores, ou .namedValues
que é 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.
deixe-me dizer algumas palavras