Захват значений и отправка триггера электронной почты - PullRequest
0 голосов
/ 24 сентября 2019

Мне удалось собрать данные о наборе пользователя, и с помощью триггера onChange я выполнил свои требования для своей задачи.Однако я понял, что, например, я заполняю столбец A1: A4.Если мой A1: A3 выходит за пределы диапазона, это вызовет электронную почту.Но если мой A4 находится в пределах диапазона, значения A1: A3 по-прежнему будут вызывать событие электронной почты, хотя оно уже вызывало его.Как сделать так, чтобы полученные значения не вызывали повторную электронную почту?

function myFunction() {

  var ss = SpreadsheetApp.getActiveSheet();
  currentsheet = ss.getSheetName();
  //var values = ss.getRange(a1Notation)
  //console.log(values);
  var lastcol = ss.getLastColumn();
  var vibrationtemplate = HtmlService.createTemplateFromFile("vibration");
  var temperaturetemplate = HtmlService.createTemplateFromFile("temperature");
  //console.log(lastcol);


  if((currentsheet == 'A Vibration') || (currentsheet == 'B Vibration')){
    console.log(currentsheet);
    for(var i =2; i<=lastcol; i++){
     var cell = ss.getRange(i,lastcol).getValues();
      console.log(""+cell);

      if(cell > 8){
        console.log("Value is more than 8 and current value is "+cell);
        vibrationtemplate.vibrate = cell;
        MailApp.sendEmail("someone@gmail.com",
    "Parameter Out of Range Notification",
     "",{htmlBody: vibrationtemplate.evaluate().getContent()});
    }
      }
    }

  if((currentsheet == 'A Temperature') || (currentsheet == 'B Temperature')){
    console.log(currentsheet);
    for(var i =2; i<=lastcol; i++){
    var cell = ss.getRange(i,lastcol).getValues();
      console.log(""+cell);
      if(cell > 80){
        console.log("Value is more than 80 and current value is "+cell);
        temperaturetemplate.temp = cell;
        MailApp.sendEmail("someone@gmail.com",
    "Parameter Out of Range Notification",
     "",{htmlBody: temperaturetemplate.evaluate().getContent()});
    }
    }



  }
}

РЕДАКТИРОВАТЬ: последний код - использование ежедневного триггера и проверки только в конце дня.

function myFunction() {

  const ss = SpreadsheetApp.getActiveSheet();
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var sheetNumber = sheets.length; //Get number of sheets within Spreadsheet
  var currentSheet = ss.getIndex()-1; //Get index of current sheet with 0 indexing
  var vibrationtemplate = HtmlService.createTemplateFromFile("vibration"); //Create HTML for email by grabbing template from vibration.html
  var temperaturetemplate = HtmlService.createTemplateFromFile("temperature"); //Create HTML for email by grabbing template from temperature.html

  const vibrationlimit = 8; //Set vibrationlimit as constant equals to 8
  const temperaturelimit = 80; //Set temperaturelimit as constant equals to 80

  var currentDate = new Date(); //Get system Date and Time
  var currentDay = currentDate.getDate(); //Extract Date from Full Date(currentDate)
  var currentMonth = currentDate.getMonth() +1; //Extract Month from Full Date(currentDate), add +1 as month index start from 0.

  for (var z = currentSheet ; z<sheetNumber ; ++z ){

  SpreadsheetApp.setActiveSheet(sheets[z])
  var lastcol = sheets[z].getLastColumn();
  var lastrow= sheets[z].getLastRow();
  var cellDate = sheets[z].getRange(1,lastcol).getValues();
  var formattedCellDate = new Date(cellDate);
  var cellDay = formattedCellDate.getDate();
  var cellMonth = formattedCellDate.getMonth() + 1;

    if((z==0) || (z==2)){
      if((cellDay == currentDay) && (cellMonth == currentMonth)){ 
    for(var i = 2; i<=lastrow; i++){
     var scxvibrationname = sheets[z].getRange(i,1).getValues();
     var vibration = sheets[z].getRange(i,lastcol).getValues();
        if(vibration > vibrationlimit){
          Logger.log("Vibration over 8 - Current Value is "+vibration);
        vibrationtemplate.vibrate = vibration;
        vibrationtemplate.scxvibration = scxvibrationname;
        }

    }
      }

    }
}

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019
function myFunction() {

  const ss = SpreadsheetApp.getActiveSheet();
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var sheetNumber = sheets.length; //Get number of sheets within Spreadsheet
  var currentSheet = ss.getIndex()-1; //Get index of current sheet with 0 indexing
  var vibrationtemplate = HtmlService.createTemplateFromFile("vibration"); //Create HTML for email by grabbing template from vibration.html
  var temperaturetemplate = HtmlService.createTemplateFromFile("temperature"); //Create HTML for email by grabbing template from temperature.html

  const vibrationlimit = 8; //Set vibrationlimit as constant equals to 8
  const temperaturelimit = 80; //Set temperaturelimit as constant equals to 80

  var currentDate = new Date(); //Get system Date and Time
  var currentDay = currentDate.getDate(); //Extract Date from Full Date(currentDate)
  var currentMonth = currentDate.getMonth() +1; //Extract Month from Full Date(currentDate), add +1 as month index start from 0.

  for (var z = currentSheet ; z<sheetNumber ; ++z ){

  SpreadsheetApp.setActiveSheet(sheets[z])
  var lastcol = sheets[z].getLastColumn();
  var lastrow= sheets[z].getLastRow();
  var cellDate = sheets[z].getRange(1,lastcol).getValues();
  var formattedCellDate = new Date(cellDate);
  var cellDay = formattedCellDate.getDate();
  var cellMonth = formattedCellDate.getMonth() + 1;

    if((z==0) || (z==2)){
      if((cellDay == currentDay) && (cellMonth == currentMonth)){ 
    for(var i = 2; i<=lastrow; i++){
     var scxvibrationname = sheets[z].getRange(i,1).getValues();
     var vibration = sheets[z].getRange(i,lastcol).getValues();
        if(vibration > vibrationlimit){
          Logger.log("Vibration over 8 - Current Value is "+vibration);
        vibrationtemplate.vibrate = vibration;
        vibrationtemplate.scxvibration = scxvibrationname;
        }

    }
      }

    }
}

Я манипулировал, используя ежедневный управляемый по времени триггер.

0 голосов
/ 24 сентября 2019

Вы можете использовать PropertiesService для сохранения последней строки предыдущего запуска скрипта

Следующий код устанавливает начальную строку для цикла for в (последняя строка + 1)предыдущего запуска скрипта, так что будут отправляться только письма из вновь добавленных строк:

function myFunction() {

  var ss = SpreadsheetApp.getActiveSheet();
  currentsheet = ss.getSheetName();
  //var values = ss.getRange(a1Notation)
  //console.log(values);
  var lastcol = ss.getLastColumn();
  var lastrow=ss.getLastRow();
  var vibrationtemplate = HtmlService.createTemplateFromFile("vibration");
  var temperaturetemplate = HtmlService.createTemplateFromFile("temperature");
  //console.log(lastcol);
        if(PropertiesService.getScriptProperties().getKeys().length==0){
           PropertiesService.getScriptProperties().setProperty('startRow', lastrow+1);
         }
  var startRow=PropertiesService.getScriptProperties().getProperty('startRow');
  if((currentsheet == 'A Vibration') || (currentsheet == 'B Vibration')){
    console.log(currentsheet);
//I ASSUME THAT YOU WANT TO LOOP THROUGH ALL ROWS AND NOT COLUMNS
    for(var i =startRow; i<=lastrow; i++){
     var cell = ss.getRange(i,lastcol).getValues();
      console.log(""+cell);

      if(cell > 8){
        console.log("Value is more than 8 and current value is "+cell);
        vibrationtemplate.vibrate = cell;
        MailApp.sendEmail("someone@gmail.com",
    "Parameter Out of Range Notification",
     "",{htmlBody: vibrationtemplate.evaluate().getContent()});
    }
   }
  }
...
PropertiesService.getScriptProperties().setProperty('startRow', lastrow+1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...