发送电子邮件通知Google表格

时间:2016-03-23 14:12:44

标签: google-apps-script google-sheets google-form

我的公司已经创建了一个Google表单,可以让我们的某个流程变得更加容易。 Google表单基于主电子表格,其中包含从表格输入的所有数据。然后,此电子表格会过滤掉表单提交,并将数据发送到每个部门的电子表格,如前所述,该电子表格会从“电子表格”中获取所有信息。"

我们以前设置过这样,当员工在电子表格中进入并批准或拒绝这些请求时,如果有人输入"已批准"我们会收到电子邮件通知。或者"拒绝。"最近我们更改了它,所以如果某个人提交了一个客户请求,它将自动获得批准,但是当我们这样做时,电子邮件通知停止工作,因为没有人手动输入"已批准"或"拒绝"对于这些要求。它在手动输入时仍然有效,但是当单元格自动填入时,sendNotification不起作用。

由于没有实际数据输入到各个部门表中,我们希望将通知触发器放在"主表上,"但是我们有时间收到要发送的电子邮件通知。基本上我们想要它,如果任何细胞在"列F"它包含一定的电子邮件地址列表,它会向第三方发送电子邮件,通知他们实际继续进行更改。

这是我们迄今为止所拥有的。请记住,这是最初工作的代码。我尝试了许多不同的变化,并且没有任何运气,但我不是受过最多教育的程序员:

function sendNotification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Form Responses 3");
  //Get Active cell
  var mycell = ss.getActiveSelection();
  var cellcol = mycell.getColumn();
  var cellrow = mycell.getRow();
  var cellValue = mycell.getValue();

  var activeUser = Session.getActiveUser();
  var recipients = "xxxx@xxxxxxxxxx.com";
  var subject = "Update to "+ss.getName();
  var body = activeUser + " has marked row " + cellrow + " \"" + cellValue + "\" in \"" + ss.getName() + "\".  Visit " + ss.getUrl() + " to view the changes."; 

  if (cellcol == 2) {
    if (cellValue.indexOf('test1@test.com') >= 0) {
      var subject = "Lunch Is Served";
      Logger.log('Sending approval notification of row ' + cellrow + ' to ' + recipients);
      MailApp.sendEmail(recipients, subject, body);
    }  
  }
}

请记住,我们不能使用lastRowNumber(至少我认为我们没有),因为我们已经列出了超过一千行,所以信息将自动填入数组。最后,我们当前的触发器设置为" On Form Submission"因为我们希望这些电子邮件在表单提交时进来。

我已经为您提供了一个示例电子表格供您查看。填写表格时请使用test1@test.com作为您的电子邮件地址。

可以在以下网站找到Google表格: Test Sheet!

非常感谢你,我期待着阅读你的回复!

1 个答案:

答案 0 :(得分:0)

您无法使用该行:

var mycell = ss.getActiveSelection();

如果该功能从“On Form Submit”触发器运行,则没有活动选择。虽然,“On Form Submit”事件对象有一个属性可用于提供当前编辑的范围。您必须从表单提交中获取事件对象。那么你有3个选择。 1)获取值2)获取问题对象及其值3)获取编辑范围的范围。首先,获取传递给函数的事件对象。提交表单后,数据将自动提供给与“表单提交”触发器关联的功能。字母e通常用作变量名来获取事件对象:

function sendNotification(e) {

但您可以使用任何变量名称:

function sendNotification(objOfData) {

Apps Script Documentation - Spreadsheet - On Form Submit

function sendNotification(e) {
  var cellValue = e.values[4];//Get the value in column 5