【发布时间】:2020-08-07 19:39:26
【问题描述】:
我正在尝试编写一个函数,该函数根据单元格的值向 Google 表格的编辑者发送电子邮件。我遇到了实现这一点的问题,并且希望得到一些建议。在某些情况下,表格是表格的后端,我们询问填写表格的人在我们的活动之前是否需要任何特殊的便利。
我能够成功设置向所有者发送电子邮件的功能。问题是“所有者”,也就是创建表单的人,只会制作表单而不是自己运行活动。
他们将管理活动的人员添加为编辑。因此,我希望脚本在与会者需要特殊住宿时通过电子邮件发送给编辑。
这是我给所有者发送电子邮件的内容:
function accommodateNotify() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Form Responses 1');
var ownerEmail = ss.getOwner().getEmail();
var startingRow = 6;
Logger.log(ownerEmail);
var name = ss.getName();
Logger.log(name);
var url = ss.getUrl();
Logger.log(url);
var lastRow = getLastNonEmptyRow(sheet.getRange(1, 83, sheet.getLastRow(), 1));
Logger.log(lastRow);
var needsAccommodation = sheet.getRange(lastRow, 83).getValue();
Logger.log(needsAccommodation);
var requiredAccommodation = sheet.getRange(lastRow, 85).getValue();
if (needsAccommodation == "Yes") {
var message = "An attendee for " + name + " " + " has stated they need accommodations. Please review: " +url;
var subject = "Accommodation Request Alert";
Logger.log("sending email...\n" + " subject: " + subject + "\n message: " + message);
GmailApp.sendEmail(ownerEmail, subject, message);
}
}
使用getEditors 的问题在于它返回一个数组(因为它们可能不止一个编辑器)。您对我将如何构建它以通过电子邮件发送给编辑有任何指导吗?
我设法把它放在一起,但由于某种原因它给编辑发了两次电子邮件......
function accommodateNotify() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Form Responses 1');
var editors = ss.getEditors();
for (var i = 0; i < editors.length; i++) {
Logger.log(editors[i].getEmail());
//var ownerEmail = ss.getOwner().getEmail();
var startingRow = 2;
var name = ss.getName();
Logger.log(name);
var url = ss.getUrl();
Logger.log(url);
var lastRow = getLastNonEmptyRow(sheet.getRange(1, 29, sheet.getLastRow(), 1));
Logger.log(lastRow);
var needsAccommodation = sheet.getRange(lastRow, 29).getValue();
Logger.log(needsAccommodation);
var requiredAccommodation = sheet.getRange(lastRow, 85).getValue();
if (needsAccommodation == "Yes") {
var message = "A student for " + name + " " + " has stated they need accommodations. Please review: " +url;
var subject = "Accommodation Request Alert";
Logger.log("sending email...\n" + " subject: " + subject + "\n message: " + message);
GmailApp.sendEmail(editors, subject, message);
}
}
}
【问题讨论】:
-
仔细检查
for循环的结束位置。如果您在循环中包含GmailApp.sendEmail(editors, ...),那么这就是您执行两次的原因。要么将 GmailApp.send 拉出 for 循环,要么在每次迭代时发送editors[i]电子邮件。
标签: email google-apps-script gmail google-apps-script-editor