我的Google脚本存在问题。它实际上是按原样工作但问题是,在提交表单并且有人提交新表单后,第一个提交的表单将不再发送电子邮件,因为它正在寻找LastRow。我很难让这个工作正常工作......有人可以帮忙吗?
以黄色突出显示的列,在供应商填写右侧第5列(绿色)后,也应填写"已发送"让用户知道电子邮件已发送给创建表单的人。
这是一张有希望获得更好主意的表格图片 http://i57.tinypic.com/34tej4w.png
function sendNotification() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheets()[0];
var startRow = sheet.getLastRow();
var dataRange = sheet.getRange(startRow, 1, 1, 21) ;
var data = dataRange.getValues();
var row;
for (i in data) {
row = data[i];
var EMAIL_SENT = 'Sent';
var emailSent = row[19]; // Third column
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
//Define Notification Details
var subject = "Row 12 has been edited!";
var body =
'<html><body><b><u>Product Check</u></b>'
+ '<br><b>Time: </b>'
+ row[0]
+ '<br><b>Email requested: </b>'
+ row[1]
+ '<br><b>Request date: </b>'
+ row[2]
+ '<br><b>ISBN: </b>'
+ row[4]
+ '<br><b>Product Title: </b>'
+ row[7]
+ '<br><b>Supplier Name: </b>'
+ row[8]
+ '<br><b>PO Number: </b>'
+ row[10]
+ '<br><b>Comments: </b>'
+ row[12]
+ '<br>View the spreadsheet here: <a href="#"><b>Click here</b></a> </html></body>';
if (row[13] != '' && row[0] != '' && row[18] == '') {
var recipients = row[1];
var subject = "Column 'N' was edited!";
sheet.getRange(startRow, 19, 1, 1).setValue(EMAIL_SENT) && sheet.getRange(startRow, 19, 1, 1).setBackgroundColor("#00ff00");
SpreadsheetApp.flush();
MailApp.sendEmail({
to: recipients,
subject: subject,
htmlBody: body});
}
答案 0 :(得分:0)
您描述的行为是正常的,您自己已经发现了原点......
不使用最后一行作为参考,而是使用没有&#39; EMAIL_SENT&#39;的第一行。在对应于行[19]的列中,该行将是正确的行。
但是在并发的情况下,只会处理一个请求,因此我建议您每隔几分钟使用一个计时器触发器运行此代码,以便在每种情况下都处理所有提交。
另一个解决方案是使用on Form Submit触发器,但是从处理程序回调对象而不是表单(e.namedValues,see doc here)获取值,但这意味着代码中会有更多更改。在后一种情况下,每个提交都将被独立处理,即使是两个或更多提交都在一起。