MailApp.sendEmail not working with onEdit function (Google Sheets Script Editor)

江枫思渺然 提交于 2021-02-10 18:37:01

问题


I'm trying to create pop-up and email notifications for when certain daily limits are exceeded on edit of the spreadsheet.

When the values relating to today's date exceed the limits and I run the script, both the pop-up and email notifications are sent. But when using the onEdit function, i.e editing the column defined in the edit range.. only pop-up notifications are raised and no emails are sent.

Does anyone know why the onEdit function would work for SpreadsheetApp.getUi().alert but not MailApp.sendEmail? And why it works when the code is run, but not 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');}
    }
    }
   }}

回答1:


I think the issue is that since simple triggers fire automatically without asking for authorization they cannot access services that require authorization. Reference




回答2:


I Agree with Cooper. You can wrap your code in a try and catch to see the error (code below) message.

You might be able to get around this be setting a time driven trigger. Let's say it is set to one minute and it looks at the data to check for the conditions you are looking for then sends an email if the conditions are met.

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

This is the logger error.



来源:https://stackoverflow.com/questions/48284675/mailapp-sendemail-not-working-with-onedit-function-google-sheets-script-editor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!