【发布时间】:2019-09-24 21:18:13
【问题描述】:
~20% 的时间,我的 Google 应用脚本会发送一封重复的电子邮件,看似随机。我尝试将 MailApp.sendEmail() 切换为 GmailApp.sendEmail(),并添加一些睡眠行,以防代码在更改工作表之前以某种方式再次运行。我只有一个运行脚本的更改触发器。也许这与我的 gmail 登录的设备数量有关?我对此很陌生,所以我可能会遗漏一些明显的东西。
脚本:
function SortResponse() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("SheetName");
var Avals = sheet.getRange("A1:A").getValues();
var Alast = Avals.filter(String).length;
var range = sheet.getDataRange();
var values = range.getValues();
var lasteq = values[Alast-1][2];
var lastloc = values[Alast-1][3];
var sentbox = values [Alast-1][31];
var questions = 24;
Utilities.sleep(4000);
for (var i = 5; i <= questions; ++i) {
var g = sheet.getRange(Alast,i).getValue();
if (g != 'Good' && g != 'N/A' && g !== "") {
sheet.getRange(2,i).setValue(values[0][i-1]);
}
}
// Send Alert Email.
if (sentbox != "sent") {
var comments = values[Alast-1][25];
var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName").getRange("AJ2:AJ20");
var emailAddress = emailRange.getValues();
var msgCell = sheet.getRange('AD1').getValues();
var message = 'Equipment: '+lasteq+'\n at location: '+lastloc+'\n has been noted to need maintenance on: \n \n' +msgCell+'\n'+comments+' \n';
var subject = 'Vehicle Inspection Maintenance Email Notification';
GmailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(Alast,32).setValue("sent");
Utilities.sleep(4000);
sheet.getRange("B2:Z2").clearContent();
}
Utilities.sleep(4000);
sheet.getRange("B2:Z2").clearContent();
}
触发器: Triggers
重复的电子邮件: Duplicate Emails
电子表格图片: Spreadsheet Image
感谢您的关注,任何帮助将不胜感激。
【问题讨论】:
-
实际上我不确定 Alast 是什么,因为 Avals 是一个二维数组,我不确定过滤器会用它做什么。还有这个
var Avals = sheet.getRange(1,1,sheet.getLastRow()).getValues(); -
非常感谢您的意见。我只是为 Avals 尝试过,脚本似乎工作相同,但仍然发送了两封电子邮件。
-
我需要查看您的电子表格来帮助您,因为我无法从您的代码中弄清楚您在做什么。
-
我已编辑帖子以包含电子表格的图像。
-
A 列是时间戳,B-D 是基本信息(名称、项目、位置),E-Y 是“好”、N/A 或“需要维修/维护”,AF 是 ' Sentbox' 表示已通过电子邮件发送了一行,不应再次通过电子邮件发送。第 3 行和更大的行是对 google 表单响应表的查询,其中包括提交维护响应的行。
标签: google-apps-script google-apps