【问题标题】:How to use onEdit function to trigger an email如何使用 onEdit 函数触发电子邮件
【发布时间】:2021-04-14 15:14:16
【问题描述】:

我对脚本编写非常陌生,但我正在尝试设置一个脚本,以便在某个工作表中填充某个单元格 (A4) 后发送电子邮件。

我遇到的麻烦是让脚本触发 - 我知道在不在电子表格中运行它会产生错误,我没有收到错误消息,但似乎没有使用此代码发送电子邮件:

function onEdit(e) {

var name = SpreadsheetApp.getActiveSpreadsheet().getName();
var cell = e.range.getA1Notation();
var spreadSheet = e.source;
var sheet = spreadSheet.getSheetByName('Scanned');
var range = getRange('A4');
var column = e.range.getColumn();
var row = e.range.getRow();

  if(sheet == 'Scanned' && column == 1 && row == 4)

    MailApp.sendEmail('joey@gmail.com', 'Tipping Notification: '+(name), 'Notification email body '+(name));
  
}

【问题讨论】:

  • 我的猜测是你不了解运行它。如果你运行它,那么你必须提供事件对象,否则 e 不存在。而且你不能使用简单的触发器来运行任何需要权限的东西。

标签: google-apps-script google-sheets


【解决方案1】:

onEdit 触发器始终需要对电子表格进行“手动”编辑。如果电子表格(单元格)由公式填充,则不会触发 onEdit 触发器。

此外,为了发送电子邮件,您必须使用installable onEdit 触发器。 Simple onEdit 触发器无法访问需要授权的服务。

【讨论】:

  • 就是这样 - 触发器必须安装在代码中,并且还要在“触发器”菜单中进行设置才能使其工作!感谢大家的帮助
【解决方案2】:

使用简单触发器有一些限制,一是简单触发器不能访问需要授权的服务。例如,简单的触发器无法发送电子邮件,因为 Gmail 服务需要授权。

为了使用需要授权的服务,您需要创建一个可安装触发器。请参阅此link,了解如何创建可安装触发器。

另外,getSheetByName() 返回一个工作表对象,不是已编辑工作表的名称。这会导致您的代码跳过发送电子邮件。

试试这个:

代码:

function onEditA4(e) {
  
  var editedSheet = e.range.getSheet().getName();
  var editedCell = e.range.getA1Notation();
  var name = e.source.getName();
  if(editedSheet == 'Scanned' && editedCell == "A4")
    MailApp.sendEmail('insert email here', 'Tipping Notification: '+(name), 'Notification email body '+(name)); 
}

示例触发器:

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 2018-07-14
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多