例如,如果在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()函数。
答案 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);
}
}