首页 > 解决方案 > 如何通过单元格值更改触发电子邮件脚本?

问题描述

我正在使用 Google 表单来运行客户数据库。当客户打电话给我时,我正在编辑同一个 Google 表单条目。因此,我想了解特定单元格的这种更改或输入如何触发我将在此处发布的邮件脚本。它应该只触发一次,在变化的那一刻。

编辑:

我现在添加了“if”,并将触发器设置为表单提交。现在,如果我在 Google 表单中更改“测试”的值并发送表单,则会向我发送一封电子邮件。但是,如果我在表单中有多个电子邮件地址,我该如何为每个条目指定这个。还说它不送双份?

function sendArticleCountEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.setActiveSheet(ss.getSheetByName("Test"));
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange("A2:F4");
  var data = dataRange.getValues();
  var currentValue = sheet.getRange("J2").getValue();
  if (currentValue == ("test")) 
  for (i in data) {
    var rowData = data[i];
    var emailAddress = rowData[1];
    var recipient = rowData[0];
    var message1 = rowData[2];
    var message2 = rowData[3];
    var parameter2 = rowData[4];
    var message3 = rowData[5];
    var message = 'Dear ' + recipient + ',\n\n' + message1 + ' ' + message2 + ' ' + parameter2 + ' ' + message3;
    var subject = 'Your article count for this month';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

标签: javascriptgoogle-sheetsgoogle-sheets-formula

解决方案


回答:

无法就 Google 表格中的单元格更改发送电子邮件。但是,您可以在提交表单时发送电子邮件。

简单触发器:

根据关于简单触发器的 Google Apps 脚本文档:

onEdit(e)用户更改电子表格中任何单元格的值时,触发器会自动运行。

但是,触发器也有一定的限制:

他们无法访问需要授权的服务。例如,简单触发器无法发送电子邮件,因为 Gmail 服务需要授权,但简单触发器可以使用匿名的语言服务翻译短语。

提交表格:

您仍然可以使用GmailAppApps 脚本中的库来发送电子邮件,并指定多个发送到。如果如您的示例表中所示,电子邮件地址都在 B 列中:

var emails = []
var addresses = SpreadsheetApp.getActiveSpreadsheet().getRange('B2:B').getValues();
var list = [];
for (var i = 0; i < addresses.length; i++) {
  if (addresses[i] == "") {
    break;
  }
  if (list.indexOf(addresses[i][0]) > -1) {
  }
  else {
    list.push(addresses[i][0]);
  }
}

然后编辑:

var emailAddress = rowData[1];

成为:

var emailAddress = list[0];

这会将电子邮件发送到列出的所有电子邮件地址,但会跳过工作表中的重复项。

参考:


推荐阅读