Я пытаюсь предотвратить отправку электронного письма при отправке значения - PullRequest
0 голосов
/ 08 ноября 2019

Я построил систему проверки для наших двигателей на работе. Часть программы заключается в том, что оформление заказа должно выполняться ежедневно. Я создал скрипт, который отправляет электронное письмо, когда оно не было заполнено за день. Он отлично работает, и у меня есть триггер, который срабатывает каждый день в 9 и 10. Теперь эти буровые установки иногда выходят из строя, и им не нужно делать проверки, пока они не работают. Я сделал это так, когда они вывели вышку из эксплуатации, это отражено в их ежедневной записи.

Я думал, что она работала правильно, но у меня вышла из строя первая установка, и она все еще разослала электронное письмо. ,Я думал, что при условии, что значение IF в столбце три не «Не работает», оно будет продолжено, и если оно скажет «Не работает», это остановит сценарий. Что я сделал не так с кодом?

https://docs.google.com/spreadsheets/d/134DFqUNgUihWacm3hNd4B9Zqe-BYubYRXd-hh15fgK8/edit?usp=sharing


function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var lastRow = CountColA();
  var lastDate = new Date(sheet.getRange(lastRow,1).getValues());
  var thisDate = new Date();
  var DateDiff = (thisDate.getTime() - lastDate.getTime())/1000/60/60/24;
  var emailSent = lastRow[3]; // Third column
    if (emailSent != "Out of service") { // Prevents sending duplicates
    if (DateDiff > 0.35) {
    MailApp.sendEmail("email@gmail.com" + "," + "email@gmail.com", "Unit Has Not Signed Narcotics Form", "BR133 has not signed the narcotics log today");
  } 
}
}

function CountColA() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for(var i = data.length-1 ; i >=0 ; i--){
    if (data[i][0] != null && data[i][0] != ''){
      return i+1 ;
    }
  }}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Вам не нужна функция CountColA, чтобы получить последний ряд. Вы можете просто использовать функцию getLastRow [1]:

sheet.getLastRow();

и получить значение столбца C следующим образом:

sheet.getRange(lastRow, 3).getValue();

Кроме того, я проверил ваш код, а переменная lastDate неправильно, поэтому вам следует проверить, как создать Date из строки [2] или поместить проверку данных для Date в столбец метки времени, чтобы можно было напрямую получить значение Date.

[1] https://developers.google.com/apps-script/reference/spreadsheet/sheet#getlastrow

[2] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

0 голосов
/ 08 ноября 2019

CountCola() возвращает целое число или ничего;

var lastRow = CountColA();

var emailSent=lastrow[3];, но lastRow не является массивом.

Так что трудно сказатьчто emailSent находится в этой строке: if (emailSent != "Out of service")

...