首页 > 解决方案 > 我需要一个脚本,它会在单元格值更改时自动触发 sendEmail 函数

问题描述

我编写了一个代码,其中函数 sendEmail 发送一封电子邮件,该电子邮件出现在我的谷歌表格的单元格 E9 中,该表格链接到我网站中的表格。当一个新用户输入他/她的电子邮件时,电子邮件会反映在我的谷歌表格的单元格 E9 中。之后我必须手动运行应用程序脚本才能成功地将电子邮件发送到单元格 E9 中存在的邮件 ID。我希望这是自动的,这样我就不必在每次用户输入新电子邮件时手动运行应用程序脚本。请建议一个我对这些代码知之甚少的应用程序脚本,因此完整的可执行代码将有很大帮助。谢谢

 function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  
  var emailAddress = sheet1.getRange(9,5).getValue();
  var subject = "Checking the app script" 
  var message = "Checking the app script working from indigenious id and drive link https://drive.google.com/file/d/1MdoADqSeudMwMruLJUU32OA5bdtyweiv/view?usp=sharing "
  MailApp.sendEmail(emailAddress, subject, message);

  
}

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-api

解决方案


您需要在可安装的 onEdit 触发器上设置您的功能

  • onEdit在电子表格中进行编辑时触发触发(例如,用户在单元格中输入值)
  • 当事件触发触发器时,它们会自动运行您的功能
  • 它们允许您检索与编辑相关的事件对象,例如已编辑的单元格和已输入的值 - 请参阅此处以获取可用的 Google 表格事件Edit
  • 由于简单触发器的限制,您需要使用可安装版本才能发送电子邮件
  • 如此处所述,将触发器绑定到您的函数

修改您的代码以在触发器上运行(请注意,由于使用事件对象,如果您尝试通过按“播放”按钮手动运行此代码将出错):

function sendEmail(e) {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  if(e.range.getA1Notation() == "E9" && e.range.getSheet() == sheet1){   
    var emailAddress = e.value;
    var subject = "Checking the app script" 
    var message = "Checking the app script working from indigenious id and drive link https://drive.google.com/file/d/1MdoADqSeudMwMruLJUU32OA5bdtyweiv/view?usp=sharing "
    MailApp.sendEmail(emailAddress, subject, message);
  } 
}

此代码使用事件对象rangevalue.


推荐阅读