Можем ли мы получить старое значение ячейки без использования триггера onEdit () в скрипте Google? - PullRequest
1 голос
/ 19 октября 2019
function onEdit(evt) 
{
var sheet = evt.source.getActiveSheet();
var range =  evt.range;
var column = evt.range.getColumn();
var row =    evt.range.getRow();
var sheetName = sheet.getName();

if(range.getRow() >= 3 && range.getColumn() >= 2  && range.getRow() <= 15 &&  range.getColumn() <= 2 )
 {
  if(sheetName == "Emails")
  {
   Logger.log(evt.value);//current value
   //Logger.log(evt.oldValue);//old value            
  }
 }
}

Я не хочу использовать вышеуказанный код для старого значения, есть ли другой способ добиться этого?

1 Ответ

0 голосов
/ 23 октября 2019

Основываясь на пояснениях в вашем комментарии

Привет, зиганотчка, я просто хотел создать логику для уведомлений по электронной почте, сравнивая старое и новое значение. Я пытался создать функцию, если нет изменений в определенном диапазоне в течение 2 дней, а затем отправить уведомление по электронной почте. Можете ли вы помочь мне с логикой?

  • Вы хотите отслеживать значение и отправить электронное письмо, если оно не изменилось в течение двух дней
  • Для этого вам нужночтобы сохранить значение (и метку времени) после последнего изменения, для которого вы можете использовать Свойства скрипта
  • Вам необходим триггер, который может быть onEdit или управляемым временем который будет регулярно проверять текущее значение, сравнивать его с сохраненным и оценивать, прошло ли 2 дня с момента последнего редактирования.
  • Поскольку вы не хотите использовать триггер onEdit, найдите ниже объявление с вашимкод для использования с управляемым по времени триггером
  • Вы можете привязать триггер к своей функции, перейдя в «Правка» -> «Триггеры текущего проекта» -> «Создать новый триггер»
  • Установите Select event source в Time-driven и type и interval в соответствии с вашими потребностями, например, Hour timer, Every hour

Образец:

function checkUpdateStatus()
{
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Emails");
  //Selects a range of 13 rows and one column starting with the third row, second column - adapt to your needs if necessary
  var range =  sheet.getRange(3,2,13,1);
  var values=range.getValues();
  var now=new Date().getTime();
  for(var i=0;i<values.length;i++){
    for(var j=0;j<values[0].length;j++){
      //the following lines will set-up script properties the first time you use them:
      if(PropertiesService.getScriptProperties().getKeys().length==0){ 
        PropertiesService.getScriptProperties().setProperty('values '+i+"-"+j,values[i][j]);
        PropertiesService.getScriptProperties().setProperty('timestamp '+i+"-"+j,now);
        //if script properties have been set-up already:
      }else{
        //use parseInt() if your values are integers, otherwise ommit it 
        var currentValue=parseInt(PropertiesService.getScriptProperties().getProperty('values '+i+"-"+j));
        //if the value is still the same - check how long it has been the same
        if(currentValue==values[i][j]){
          var timeDifference=now-(PropertiesService.getScriptProperties().getProperty('timestamp '+i+"-"+j));
          var days=timeDifference/1000/3600/24;
          if(days>2){
            //send email
          }
          //if the value has been changed, update the script properties with the new value and timestamp
        }else{
          PropertiesService.getScriptProperties().setProperty('values '+i+"-"+j,values[i][j]);
          PropertiesService.getScriptProperties().setProperty('timestamp '+i+"-"+j,now);
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...