Google脚本-仅针对单元格值的新变化发送电子邮件

时间:2018-10-30 14:17:18

标签: javascript email google-sheets triggers

我已经搜索并排查了好几个小时,但无法正常工作。

我正在尝试将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的建议,以结合进行背景颜色检查,但是没有任何运气(尽管完全没有调试错误,脚本根本不发送电子邮件)。

0 个答案:

没有答案