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



我正在使用谷歌电子表格。

我在 C 列中有参与者的电子邮件地址,在 O 列中有他们相应的状态。(状态将为"完成"或"打开"或"正在进行"或"空"(。

如果 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。

这可以使用onEdit可安装的触发器来实现,您需要通过转到触发器或运行 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语句。您可以获取已编辑范围的行和列,并改为基于该行和列的脚本的其余部分。

相关内容

最新更新