从下拉列表中选择特定数据时发送电子邮件

时间:2016-03-07 22:04:00

标签: google-apps-script google-sheets

例如,如果在A栏中采取了一项操作,则会将电子邮件发送到E列中的相应电子邮件地址。我们使用Google表格向我们的客户发送路线时间表,如果我们的字段是非常有用的工作人员在前往客户的途中,可以生成电子邮件。我使用脚本编写了这样的选项,但没有根据编辑的单元格发送到不同的电子邮件地址。

最好的方法是拥有一个数据验证下拉菜单,其中包含状态"途中,服务,完成。"因此,一旦状态设置为"途中"电子邮件通知将发送到另一行的地址。

以下是我到目前为止所获得的剧本:

function sendEmail() { 
    // return all data in active spreadsheet
    var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues()
    for (i in values.length) { //iterate over each row
        // get value of column 1 (aka B) for this row 
        // this is the conditional cell for emailing
        var data= values[i][1];
        // get email address from column 2 (aka C)
        var emailAddress = values[i][2];
        var subject = "We are en route with your order"
        var message = "Our crew will arrive in 5 minutes";
        // if data cell equals En Route, send email for this row
        if (data = "En Route") ;{
            MailApp.sendEmail(emailAddress, subject, message);
        }
    }
}

我猜测可能需要在某处使用onEdit()函数。

1 个答案:

答案 0 :(得分:1)

您无法从onEdit()发送电子邮件,因为simple triggers are not authorized to do this。相反,您应该创建一个可安装的触发器,例如,通过选择Resources>该项目在脚本编辑器中触发。将其设置为"来自电子表格>编辑"。

此外,您的方法(每次编辑扫描整张纸,并向匹配" En Route"的任何人发送电子邮件)可能会导致多封电子邮件发送给同一个人:每次编辑都是当他们的小区是" En Route"时,他们会收到一封电子邮件。你不想要那个。相反,使用event object精确定位编辑位置和输入的新值。这就是函数的样子。

请注意,Apps脚本方法中的行/列编号是从1开始的:第2列是B等等。

function emailOnRoute(e) { 
  if (e.value == 'En Route' && e.range.getColumn() == 2) {
    var row = e.range.getRow();
    var sheet = e.range.getSheet();
    var emailAddress = sheet.getRange(row, 3).getValue();
    var subject = "We are en route with your order"
    var message = "Our crew will arrive in 5 minutes";
    MailApp.sendEmail(emailAddress, subject, message);
  }
}