如果O2值已更新,那么我需要使用模板向C2中的地址发送电子邮件。如果单元格O2已更新,则电子邮件应仅发送给C2

时间:2019-05-28 06:41:27

标签: google-apps-script

我正在使用Google电子表格。

我在C列中有参与者的电子邮件地址,在O列中有其相应的状态(状态为DONE或OPEN或ONGOING或为空)。

如果O2值已更新,那么我需要使用模板向C2中的地址发送电子邮件。如果更新了单元格O2,则电子邮件应仅发送给C2。

希望您能对此有所帮助。

我尝试了此脚本,但每次都会发送到所有电子邮件。

希望你能帮助我。

谢谢

function StatusChange() {


  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("R & A").activate();

  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lr = ss.getLastRow(); 

  var templateText = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Template for Email").getRange(1,1).getValue();

  var quotaLeft = MailApp.getRemainingDailyQuota();

  if((lr-1) > quotaLeft){
    Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + (lr-1) + " emails. Emails were not sent.");
  } else {

    for (var i = 2;i<=lr;i++){

      var currentEmail = ss.getRange(i, 3).getValue();
      var currentSheetTitle = ss.getRange(i, 11).getValue();
      var currentName = ss.getRange(i, 4).getValue();

      var messageBody = templateText.replace("{name}",currentName).replace("{title}",currentSheetTitle);
      var subjectLine = "Reminder: " + currentSheetTitle + " Status Change";


    MailApp.sendEmail(currentEmail, subjectLine, messageBody);


    } // close for loop


  } //close else statement


}

如果O2值已更新,那么我需要使用模板向C2中的地址发送电子邮件。如果更新了单元格O2,则电子邮件应仅发送给C2。

1 个答案:

答案 0 :(得分:0)

这可以通过使用onEdit可安装触发器来实现,您需要通过设置触发器或运行以下代码supplied by Google一次来进行设置。

function createSpreadsheetEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('statusChange')
      .forSpreadsheet(ss)
      .onEdit()
      .create();
}

这样做,您可以检查O列是否正在更新,然后根据该结果运行if else语句。我还清理了一些变量,以免不必要地进行多个SpreadsheetApp.getActiveSpreadsheet()调用。

注意:您将无法手动运行以下脚本,该脚本将在编辑工作表时自动运行。

function statusChange(e){

  var sp = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sp.getSheetByName('R & A');
  var row = e.range.getRow(); //get row # for edited range
  var col = e.range.getColumn(); //get column # for edited range

  if(col === 15){ //check if column O was updated

    var templateText = sp.getSheetByName("Template for Email").getRange(1,1).getValue();

    var quotaLeft = MailApp.getRemainingDailyQuota();

    if(quotaLeft < 1){
      Browser.msgBox("You have " + quotaLeft + " left and you're trying to send 1 email. Email was not sent.");
    } else{

      var currentEmail = ss.getRange(row, 3).getValue();
      var currentSheetTitle = ss.getRange(row, 11).getValue();
      var currentName = ss.getRange(row, 4).getValue();

      var messageBody = templateText.replace("{name}",currentName).replace("{title}",currentSheetTitle);
      var subjectLine = "Reminder: " + currentSheetTitle + " Status Change";

      MailApp.sendEmail(currentEmail, subjectLine, messageBody);
    } //close else statement
  } //close if statement
}

由于您要做的只是向已编辑的行发送电子邮件,因此不需要脚本中的for语句。您可以获取已编辑范围的行和列,并以其余脚本为基础。