Values are correct and within range but still sends an email

时间秒杀一切 提交于 2021-02-04 08:37:08

问题


I have a Upper Limit and Lower Limit on my spreadsheet responses that I input towards the right of my responses. The limits are both on F2 and G2. F2 is Lower Limit and G2 is Upper Limit. The code is using the function onFormSubmit and it has an MailApp.sendEmail function that will send an email in case someone enters a figure that is out of the limit.

What I do not understand that, the value that I read when the form is submitted is actually within the range but it still triggers an email.

I have tried this code specifically on a brand new form and spreadsheet and it did not have any problem.


function onFormSubmit(e){

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Responses 1");

  var speedUL = sheet.getRange("K2").getValue(); //250V
  var speedLL = sheet.getRange("L2").getValue(); //207V

  //var speedUL= parseInt(activess.getRange("K2").getValue()); //250V
  //var speedLL = parseInt(activess.getRange("L2").getValue()); //207V

  var speed1 = parseInt(e.values[2]);
  if((speed1 >= speedUL) || (speed1 <= speedLL)){

    console.log('SpeedUL: '+speedUL);
    console.log('SpeedLL: '+speedLL);
    console.log('Speed1: '+speed1);

  var template1 = HtmlService.createTemplateFromFile("speed1");
  template1.speed1 = speed1;

  MailApp.sendEmail("someone@gmail.com ",
                    "Out of Range Notification Speed of VSD",
                    "",
                    {htmlBody : template1.evaluate().getContent()});

  }else
  { 
    return;
  }
}

This is the test script that I am trying to do. With this code, I'm getting this

Error Aug 26, 2019, 5:24:29 PM TypeError: Cannot call method "getRange" of null. at onFormSubmit(Code:7)

Line 7 refers to var speedUL = sheet.getRange("K2").getValue();


回答1:


Probable Cause:

  • getRange() is called upon spreadsheet class (ss) and not on the sheet class (sheet). This usually means value of G2 and F2 of the first sheet is taken and not the specied sheet.
  • e.values is array of strings. Implicit conversion takes place when numbers are compared with strings. This is probably not the cause of your issue, but still needs to be addressed.

Solution:

  • Call getRange() on the sheet or specify the sheet name, when calling getRange() on spreadsheet.

  • Use explicit type conversion of e.value to number.

Snippet:

var temperature = Number(e.values[1]);
var temperatureUCL = ss.getRange("H3 Reponses!G2").getValue();
//or
var temperatureUCL = sheet.getRange("G2").getValue();

References:

  • Spreadsheet#getRange
  • Sheet#getRange


来源:https://stackoverflow.com/questions/57518084/values-are-correct-and-within-range-but-still-sends-an-email

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