Google apps script 一旦数据输入到空白列中,Google Sheets将使用选定单元格发送电子邮件
试图创建一个Google Sheets脚本,一旦在一个空列(M列)中输入一个值,就应该发送一封电子邮件(电子邮件地址可以硬编码),其中包含电子邮件中E3、F3、H3、I3、J3、K3、L3、M3、N3、O3的单元格值 每次在M列中输入数据时,都应运行此脚本Google apps script 一旦数据输入到空白列中,Google Sheets将使用选定单元格发送电子邮件,google-apps-script,google-sheets,Google Apps Script,Google Sheets,试图创建一个Google Sheets脚本,一旦在一个空列(M列)中输入一个值,就应该发送一封电子邮件(电子邮件地址可以硬编码),其中包含电子邮件中E3、F3、H3、I3、J3、K3、L3、M3、N3、O3的单元格值 每次在M列中输入数据时,都应运行此脚本 function sendEmail() { // return all data in active spreadsheet var values = SpreadsheetApp.get
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);
}
}
}
使用
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!');
}
}
}
然后,当您尝试访问E3等时,我已经给出了正确的整数来访问您正在查找的特定单元格,例如值[2][4]
,因为它们是0索引的,这将为您提供第3行第5列=E3的单元格
为了阻止此脚本发送多个相同的电子邮件,我添加了一行,将p列的值设置为“email Sent”,然后在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(e){
//返回活动电子表格中的所有数据
var sheet=SpreadsheetApp.getActiveSheet();
var values=sheet.getDataRange().getValues();
对于(var i=0;i
onEdit
触发器中,然后使用事件对象获取输入数据的列,然后在我的if
语句中对此进行检查i
,它将为正在处理的行抓取数据if
语句中添加了一个检查,以确保N列已填充,这将避免在数据尚未计算时发送任何电子邮件你能澄清你的问题吗?谢谢你的帮助。您提供的代码实际上会发送电子邮件。但我还希望你能帮我做另外三件事……(1)无论数据输入到哪一列,电子邮件都会被发送。->其目的是,对M列中任何单元格所做的任何更改都将作为sendMail脚本(2)的触发器。当发送电子邮件时,无论哪一行输入数据,它都会发送第1行中相同的数据。它正在拉取正确的列,而不是正确的行。例如,如果用户在第232行第M列输入日期,则发送的数据应来自第232行和第[4]、[5]、[7]、[8]、[9]、[10]、[11]、[12]、[13]、[14](3)列(N列)数据之一是基于用户输入第M列的数据的=WORKDAY()函数的结果。有没有办法延迟脚本本身的运行,直到coln有时间更新。由于现在进行了编码,数据是在WORKDAY()函数有时间操作列中的数据之前发送的。提供的代码回答了您提出的问题-所有这些都没有在问题中指定,这就是为什么我的答案中没有指定。将来,你应该在你的问题中包含你想要脚本做的所有事情。使回答问题的人不必重新编写代码以满足新的要求。无论如何,我已经在上面的代码中添加了新的需求。。。TypeError:无法从引用此行代码的未定义中读取属性“range”…var editCol=e.range.getColumn();当我调试代码时,我收到以下消息…({onEdit:function onEdit(e){var sheet=SpreadsheetApp.getActiveSheet();var values=sheet.getDataRange().getValues();for(var I=0;I
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!');
}
}
}