我已经搜索并排查了好几个小时,但无法正常工作。
我正在尝试将C列中的单元格标记为“完成”时发送电子邮件。该电子邮件将包含D列中的信息以及工作表名称。下面的代码有效,但是如果C列中有多个标记为Complete的项目,它将发送多封电子邮件。
如何修改此代码,以便仅对新标记的项目发送一次电子邮件?
我宁愿避免添加一列将项目标记为“已发送电子邮件”。
编辑:为避免疑问,我想指出,我将此设置为OnEdit触发器,所以这不是问题。
function sendNotification() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// figure out what the last row is
var lastRow = sheet.getLastRow();
// the rows are indexed starting at 1, and the first row
// is the headers, so start with row 2
var startRow = 2;
// grab column 3 (the Project Status column)
var range = sheet.getRange(2,3,lastRow-startRow+1,1 );
var numRows = range.getNumRows();
var projectStatus_values = range.getValues();
// grab column 4 (the Project Name column)
var namerange = sheet.getRange(2,4,lastRow-startRow+1,1 );
var nameNumRows = namerange.getNumRows();
var projectName_values = namerange.getValues();
// Get Active Sheet Name
var sheetname = SpreadsheetApp.getActiveSheet().getName();
// Loop over the Project Status values
for (var i = 0; i <= numRows - 1; i++) {
var projectStatus = projectStatus_values[i][0];
if(projectStatus == "Complete")
{var projectName = projectName_values[i][0];
//Define Notification Details
var recipients = "EMAIL@EMAIL.com";
var subject = sheetname + " has a new project marked Completed.";
var body = sheetname + " has a new project marked Completed:\n\n" + projectName + ".\n\nVisit " + ss.getUrl() + " to view the changes.";
//Send the Email
MailApp.sendEmail(recipients, subject, body);
}
}
//End sendNotification
在我仔细研究过的许多线程中,我发现有两种方法似乎可行,但两种方法都不适合我。
首先,我尝试了Hyde的建议here ---但遇到了一个错误(“ TypeError:在对象Range中找不到函数getvalue。”),我理解这是因为我正在使用自定义函数并且未传递一个范围,而是一个对象(可能是屠杀了)。
我也尝试了this thread的建议,以结合进行背景颜色检查,但是没有任何运气(尽管完全没有调试错误,脚本根本不发送电子邮件)。