如何循环使用onEdit函数从Google表格中的多行发送电子邮件?

时间:2019-06-10 21:36:01

标签: javascript for-loop google-apps-script google-sheets while-loop

我对此很陌生,我的工作是在Google工作表中包含FB的所有潜在客户信息,而我正在尝试提供一个功能(onEdit),该功能将根据以下信息向潜在客户发送电子邮件一个单元格的数据。例如,当A2包含“跟进”时,它将向D2中的地址发送一封电子邮件,并且正文文本来自J2(“跟进”数据验证的罐头响应)。现在,它适用于第2行,但是在其他任何行中输入“ Follow Up”时,它都会向列表中的每一行发送一封电子邮件。例如,在A29中触发事件时,它将J列中的正文发送到列表中的每封电子邮件。我正在尝试使事件一次仅发送一封电子邮件(基于符合验证要求的活动单元)。

我已尽力查看此处的其他文章,以使用for循环将这些代码拼凑在一起,以检查是否有新行(新行始终添加到工作表中)。这三个if语句可能很草率,但是我不知道如何将其清理为一个奇异的if语句。我正在考虑添加一列,该列指出是否已发送电子邮件,并更新for循环或if语句以不向那些行发送电子邮件。

  var sheetname = "Prometheus";
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname);
  var ac = sheet.getActiveCell();
  var endRow = sheet.getLastRow();
  var startRow = 1;

for (var i = endRow; i >= startRow; i--) {

  var rangeToCheck = sheet.getRange(i, 1, 1, 21);

  if (ac.getValue() == "Appt. Set (appointment is setup)") {
    data = rangeToCheck.getValues();
    Logger.log(data)
    MailApp.sendEmail({
      to: data[0][4],
      subject: "Appt. Confirmation",
      body: data[0][10]
    }); break;
  } else if (ac.getValue() == "Lead") {
    data = rangeToCheck.getValues();
    Logger.log(data)
    MailApp.sendEmail({
      to: data[0][4],
      subject: "Welcome",
      body: data[0][11]
    }); break;
  } else if (ac.getValue() == "Follow Up") {
    data = rangeToCheck.getValues();
    Logger.log(data)
    MailApp.sendEmail({
      to: data[0][4],
      subject: "Follow Up",
      body: data[0][12]
    });
  }
 }
}

我希望我的活动单元格满足if语句中的条件时,只会在同一行中将一封电子邮件发送给联系信息。现在,当一行中满足条件时,它将向工作表中的每个人发送电子邮件。

1 个答案:

答案 0 :(得分:0)

  • 当活动单元格所在行的“ B”列的值是“ Appt。Set(设置约会)”,“ Lead”和“ Follow Up”时,您要使用以下值发送电子邮件行。
    • 您要通过“ B”列的值更改邮件正文。
  • 例如,当您将“ Follow Up”放入“ B”列时,您想使用OnEdit事件触发器运行脚本。

如果我的理解是正确的,那么该修改如何?在此修改中,使用了可以通过OnEdit事件触发器检索的事件对象。请认为这只是几个答案之一。

在使用此脚本之前,请为修改后的脚本的RunByOnEdit()安装OnEdit事件触发器。

如何安装OnEdit触发器:

  • 打开脚本编辑器。
    • 编辑->当前项目的触发器。
    • 点击“添加触发器”。
    • RunByOnEdit设置为“选择要运行的功能”。
    • 将“来自电子表格”设置为“选择事件源”。
    • 将“选择事件类型”设置为“正在编辑”。

修改后的脚本:

function RunByOnEdit(e) {
  var sheetname = "Prometheus";
  var sheet = e.range.getSheet();
  var range = e.range;
  if (sheet.getSheetName() == sheetname && range.columnStart == 2) {
    var data = sheet.getRange(range.getRow(), 1, 1, 21).getValues()[0];
    var object = {
      to: data[4] // Column "E"
    };
    if (e.value == "Appt. Set (appointment is setup)") {
      object.subject = "Appt. Confirmation";
      object.body = data[10]; // Column "K"
    } else if (e.value == "Lead") {
      object.subject = "Welcome";
      object.body = data[11]; // Column "L"
    } else if (e.value == "Follow Up") {
      object.subject = "Follow Up";
      object.body = data[12];  // Column "M"
    }
    if (object.subject) MailApp.sendEmail(object);
  }
}

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。那时,为了正确了解您的情况,您可以提供样本电子表格吗?当然,请删除您的个人信息。