【问题标题】:Custom Email based on Cell values in google sheets基于谷歌表格中单元格值的自定义电子邮件
【发布时间】:2018-09-14 18:37:46
【问题描述】:

在 Google 表单/表格中构建请求批准流程时我需要帮助

我有一个类似于下面的数据响应表,A 到 J 列的标题是 “时间戳”“电子邮件地址”“名称”“目标”“帐户#”“原因”“访问(天)”“批准人”“批准”“案例 ID”

我已经通过 formMule AddOn 设置了一个表单提交电子邮件触发器到 Approval 正文,现在我想在 Approval body 批准或不批准数据响应表中的请求时触发电子邮件。

每当有人在“I”列中选择“Y”或“N”时,脚本应该假设根据该行中存在的数据触发电子邮件。

我不是专家,但尝试使用以下脚本执行此操作,但不幸的是没有得到理想的结果,我将其设置为当前项目触发器到 OnEdit

 function sendNotification1(e) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();   
      var sheet = ss.getSheetByName("Form Responses 1");

      if(e.range.getColumn() == 9 && e.value == "Y")
      {
        var name = e.range.offset(0,-6).getValue();
        var comment = e.range.offset(0,-3).getValue();
        var email = e.range.offset(0,-7).getValue();
        var case1 = e.range.offset(0,1).getValue();
        var approver1 = e.range.offset(0,-1).getValue(); 
        var subject = "Request has been Approved";
        var body = "Hi " + name + ", your Change Request number " + case1 + " has been approved by " + approver1 + " with following comments: " + "\n\r" + comment;
        MailApp.sendEmail(email, subject, body);

        }

        if(e.range.getColumn() == 9 && e.value == "N")
       {
        var name = e.range.offset(0,-6).getValue();
        var comment = e.range.offset(0,-3).getValue();
        var email = e.range.offset(0,-7).getValue();
        var case1 = e.range.offset(0,1).getValue();
        var approver1 = e.range.offset(0,-1).getValue(); 
        var subject = "Request has been Disapproved";
        var body = "Hi " + name + ", your Change Request number " + case1 + " has been Dis-Approved by " + approver1 + " with following comments: " + "\n\r" + comment;
        MailApp.sendEmail(email, subject, body);

      }   

    }

StackDriver 日志记录显示以下错误,但在引用单元地址时无法确定问题所在。

2018-09-14 08:19:06.336 PKT 范围的坐标或尺寸无效。在 sendNotification1(代码:6)

我可以使用以下代码触发任何编辑事件的电子邮件,但条件编辑事件触发器没有运气。

function sendNotification1(e) {
  MailApp.sendEmail("myemail@companygmail.com", "Sample subject", "Sample body");
}

在调试代码时,我可以看到以下错误 TypeError:无法从未定义中读取属性“范围”。 (第 6 行,文件“代码”)

我们将不胜感激任何帮助

【问题讨论】:

  • 添加的行如下 function sendNotification1(e) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Form Responses 1"); if(e.range.getColumn() == 9 && e.value == "Y") 但仍然没有收到电子邮件,当我运行调试器时它显示 TypeError: Cannot read property "range" from undefined。 (第 6 行,文件“代码”)
  • 尝试将 sendNotifications 的名称更改为 onEdit

标签: google-apps-script google-sheets


【解决方案1】:

您可能会遇到代码问题,不知道您指的是什么range,因为您从不告诉它在哪里查找。

在函数顶部添加以下内容:

var ss = SpreadsheetApp.getActiveSpreadsheet();   
var sheet = ss.getSheetByName("YOUR SHEET NAME");

它应该可以完美运行。

编辑:这是我在测试时发送给自己的电子邮件。

【讨论】:

  • 我不知道为什么它不会。我从字面上将这两行添加到您的代码中,设置了一个 onEdit 触发器并在我的工作表中对其进行了测试,它运行良好。
  • 代码在另一个文件中运行良好,不确定该文件有什么问题,无论如何 Ron 建议工作完美
  • 我检查并注意到如果我从电子表格中取消链接表单,代码也可以正常工作。附表的表格有什么具体要求吗?
猜你喜欢
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
相关资源
最近更新 更多