【问题标题】:MailApp.sendEmail not working with onEdit function (Google Sheets Script Editor)MailApp.sendEmail 不适用于 onEdit 功能(Google 表格脚本编辑器)
【发布时间】:2018-01-16 15:27:49
【问题描述】:

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

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

有谁知道为什么 onEdit 函数适用于 SpreadsheetApp.getUi().alert 而不是 MailApp.sendEmail?以及为什么它在代码运行时有效,而不是 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');}
    }
    }
   }}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

        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)
          }
        }
      

      这是记录器错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多