尝试创建一个Google表格脚本,一旦将值输入到一个空列(M列)中,就应该发送一封包含E3,F3,电子邮件中的H3,I3,J3,K3,L3,M3,N3,O3。
该脚本应在每次将数据输入到M列时运行
function sendEmail() {
// return all data in active spreadsheet
var values =
SpreadsheetApp.getActiveSheet().getDataRange().getValues()
for (i in values.length) {
//iterate over each row
var data= values[i][14];
var emailAddress = "someGuy@gmail.com";
var subject = "Marshal's Notice detected"
var message = values[i][E3] [F3] [H3] [I3] [J3] [K3] [L3] [M3]
[N3] [O3];
// if data cell is greater than one, send an email for this row
if (data > 1) ;{
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
答案 0 :(得分:0)
使用values[i][E3]
不起作用-您需要传递整数以获取要在数据数组中查找的值。我对您的脚本进行了一些更改,并在下面进行了说明。
function sendEmail() {
// return all data in active spreadsheet
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getDataRange().getValues();
for (var i = 0; i < values.length; i++) {
//iterate over each row
var data = values[i][12];
var emailAddress = "email@address.com";
var subject = "Marshal's Notice detected"
var message = values[2][4] + values[2][5] + values[2][7] //e3, f3 & h3
+ values[2][8] + values[2][9] + values[2][10] //i3, j3 & k3
+ values[2][11] + values[2][12] + values[2][13] //l3, m3 & n3
+ values[2][14]; //o3
// if data cell is greater than one, send an email for this row
if (data > 1 && values[i][15] == '') {
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(i+1, 16).setValue('email sent!');
}
}
}
我已将您的for
循环更改为可运行的值长度:
for (var i = 0; i < values.length; i++) {
然后在您尝试访问E3等的地方,我给了正确的整数以访问您要查找的特定单元格,例如values[2][4]
,因为它们的索引为0,这将为您提供单元格第3行第5列= E3。
要阻止此脚本发送相同电子邮件的倍数,我添加了一行,将列P的值设置为“已发送电子邮件”,然后在您的if
语句中添加了一个检查以确保它没有尚未发送到该行。
if (data > 1 && values[i][15] == '') {
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(i+1, 16).setValue('Email Sent');
}
在其他评论后进行编辑:
我整理了以下代码,这些代码应符合您所有的新条件。
function onEdit(e) {
// return all data in active spreadsheet
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getDataRange().getValues();
for (var i = 0; i < values.length; i++) {
//iterate over each row
var editCol = e.range.getColumn();
var emailAddress = "email@address.com";
var subject = "Marshal's Notice detected"
var message = values[i][4] + values[i][5] + values[i][7] //e3, f3 & h3
+ values[i][8] + values[i][9] + values[i][10] //i3, j3 & k3
+ values[i][11] + values[i][12] + values[i][13] //l3, m3 & n3
+ values[i][14]; //o3
// if data cell is greater than one, send an email for this row
if (values[i][13] !== '' && editCol === 13 && values[i][15] === '') {
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(i+1, 16).setValue('email sent!');
}
}
}
onEdit
触发器中,然后使用事件对象获取已输入数据的列,然后在我的if
语句中对此进行检查。i
,它将抓取正在处理的行的数据。if
语句中添加了一个检查以确保已填充N列,如果尚未计算数据,这应该避免发送任何电子邮件。