当前位置: 首页 > 知识库问答 >
问题:

MailApp。sendEmail不使用OneEdit功能(Google Sheets脚本编辑器)

夏侯智鑫
2023-03-14

我试图创建弹出窗口和电子邮件通知时,某些每日限制超过编辑的电子表格。

当与今天日期相关的值超过限制并且我运行脚本时,将发送弹出窗口和电子邮件通知。但是当使用onEdit函数时,即编辑编辑范围中定义的列...只引发弹出通知,不发送电子邮件。

有人知道为什么onEdit功能适用于电子表格应用程序吗。getUi()。警报,但不是MailApp。发送电子邮件?为什么它在运行代码时工作,而不是onEdit?

  function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Lab Analysis');

 // define edit range
  var editRange = sheet.getActiveRange();
  var editRow = editRange.getRow();
  var editCol = editRange.getColumn();
  var range = sheet.getRange("AG6:AG");
  var rangeRowStart = range.getRow();
  var rangeRowEnd = rangeRowStart + range.getHeight();
  var rangeColStart = range.getColumn();
  var rangeColEnd = rangeColStart + range.getWidth();

  // if cells lie within the edit range, run the following script
   if (editRow >= rangeRowStart && editRow <= rangeRowEnd
      && editCol >= rangeColStart && editCol <= rangeColEnd) {

   // set today's date and store a date object for today
    var date = ss.getSheetByName('Daily Process 
Limits').getRange("B1").setValue(new Date()).getValue();

   // get values in date range
    var daterange = sheet.getRange("A6:A").getValues();

   // iterate the values in the range object
    for(var i=0; i<daterange.length; i++) {

    // compare only month/day/year in the date objects
      if (new Date(daterange[i]).setHours(0,0,0,0) == 
date.setHours(0,0,0,0)) {

    // if there's a match, set the row
    // i is 0 indexed, add 6 to get correct row
      var today_row = (i+6);
      var today_set = ss.getSheetByName('Daily Process 
Limits').getRange("D1").setValue(today_row);  
      var today_fos_tac_f1 = sheet.getRange("AE"+today_row).getValue();
      var today_fos_tac_f2 = sheet.getRange("AF"+today_row).getValue();
      var today_fos_tac_pf = sheet.getRange("AG"+today_row).getValue();

    // pop up notifications to operator
    if (today_fos_tac_f1 > 0.3) {
        SpreadsheetApp.getUi().alert('pop up notification content'); }
    if (today_fos_tac_f2 > 0.3) {
        SpreadsheetApp.getUi().alert('pop up notification content'); }
    if (today_fos_tac_pf > 0.3) {
        SpreadsheetApp.getUi().alert('pop up notification content'); }

     // Set email addresses
    var emails = ['emailaddress@gmail.com'];

     // send email notification to site manager
    if (today_fos_tac_f1 > 0.3) {
      MailApp.sendEmail(emails, 'High FOS:TAC in Fermenter 1', 'email content');}
    if (today_fos_tac_f2 > 0.3){
      MailApp.sendEmail(emails, 'High FOS:TAC in Fermenter 2', 'email content');}
    if (today_fos_tac_pf > 0.3){
      MailApp.sendEmail(emails, 'High FOS:TAC in Post Fermenter', 'email content');}
    }
    }
   }}

共有2个答案

都博裕
2023-03-14

我同意库珀的观点。您可以将代码包装在一个try-and-catch中,以查看错误(下面的代码)消息。

通过设置时间驱动触发器,您可能可以绕过此问题。假设设置为1分钟,它查看数据以检查您正在查找的条件,然后在满足条件时发送电子邮件。

  function onEdit(e) {

     // Set email address
  var emails = ['some@email.com'];

     // send email notification to site manager
   try{
      MailApp.sendEmail(emails, 'High FOS:TAC in Fermenter 1', 'email content')
    } catch (e){
      Logger.log(e)
    }
  }

这是记录器错误。

艾灿
2023-03-14

我认为问题在于,由于simple触发器在不请求授权的情况下自动触发,因此它们无法访问需要授权的服务。参考

 类似资料:
  • 我正试图制作一个电子表格来管理我的资金/开支,但在尝试自动化我的流程时遇到了一个问题 我想制作一段代码,每次在工作表中编辑单元格时运行。 当被触发时,我希望它计算ssum,lsum和betal(在循环中),然后将其放入3个不同的单元格中。代码的行为符合预期,但onedit触发器不起作用。 这是我的代码: 输出变量根据调用函数的位置相应地设置相邻单元格 我试过使用setValue和clearCont

  • 在谷歌工作表上,尝试根据特定单元格中的值隐藏/取消隐藏行,并尝试在AppsScript中为此编写脚本。发现一个隔离工作(如果B55=NO,则隐藏64行): 但我需要对多个单元格和多行使用相同的方法,只要我展开它,就只有代码的最后一部分有效,而不是第一部分: 从这里开始,B121号牢房开始工作,但我的B55停止工作。有什么提示吗?谢谢!

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 问题内容: 我想在两种情况下编辑Matlab脚本 (1)在Linux终端上运行的matlab命令窗口中,如何创建和编辑脚本文件?采用 将调用交互式编辑器,这在Linux服务器上运行时是不希望的。 (2)在emacs中,有什么方法可以方便地编辑matlab脚本?使用MATLAB-Emacs或EmacsLink哪个更好? 当我尝试从http://sourceforge.net/scm/?type=cv