Сделайте простой счетчик в Google Scripts, который отслеживает предыдущее значение

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

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

У меня также возникает проблема, когда моя электронная таблица выдает ошибку `` результат не был числом '' с моим текущим выводом, вероятно, потому, что он ссылается на себя, и я не могу понять, как инициализировать счетчик, когда он может хранить только формулу в ячейке, к которой он относится.

Вот что у меня есть:

/* counter starts at 2, increases each week (called upon by Google trigger to run each week) until 
it reaches the lastRow of employees and then resets to two.
Returns this week's counter value each time to cell where function is called. */

function cleanerCounter(){ 
  /*sheets*/
  var sheet = SpreadsheetApp.getActive().getSheetByName('KitchenDuties');
  var eDirectory = SpreadsheetApp.getActive().getSheetByName('EmployeeDirectory');
  var lastRow = eDirectory.getLastRow(); //last row that contains an employee in the directory

   //counter setup
  var counter = sheet.getRange(6,2);
  counter = counter.getDisplayValue(); 
  counter = +counter; 

  if(counter >= lastRow){
    counter = 2;
    return +counter;
  } else {
    return +counter;
  }
}

2 ответа

Решение

Я был неправ, PropertiesServices определенно был подходящим вариантом, спасибо за совет. Я сделал что-то немного другое, прежде чем вы успели ответить, и это работает немного лучше для моих целей:

function cleanerCounter(){ 
  /*sheets*/
  var sheet = SpreadsheetApp.getActive().getSheetByName('KitchenDuties');
  var eDirectory = SpreadsheetApp.getActive().getSheetByName('EmployeeDirectory');
  var lastRow = eDirectory.getLastRow(); //last row that contains an employee in the directory
  var documentProperties = PropertiesService.getDocumentProperties();

  var counter = documentProperties.getProperty('COUNTER');

  counter = parseInt(counter);
  counter++;
  counter = counter.toString();
  documentProperties.setProperty('COUNTER', counter);
  Logger.log('COUNTER =', documentProperties.getProperty('COUNTER'));

  var output = sheet.getRange(2, 6).setValue(parseInt(documentProperties.getProperty('COUNTER')));


}


function resetCounter(){
  var documentProperties = PropertiesService.getDocumentProperties();
  var counter = documentProperties.setProperty('COUNTER', '2');
}

Счетчик обслуживания Simple Properties

function getCounter() {
  const ps=PropertiesService.getScriptProperties();
  var n=ps.getProperty('counter');
  if(!n){ 
    ps.setProperty('counter', 2);//initialize counter if not there
    var n=2;
    return n;
  }
  if(n>=SpreadsheetApp.openById("Insert your spreadsheet id").getSheetByName('EmployeeDirectory').getLastRow()) {
    ps.setProperty('counter',2)
  }else{
    ps.setProperty('counter',Number(n) + 1);
  }
  return ps.getProperty('counter');
}
Другие вопросы по тегам