Сделайте простой счетчик в Google Scripts, который отслеживает предыдущее значение - PullRequest
0 голосов
/ 17 июня 2020

, поэтому я пытаюсь создать расписание с автоповоротом, используя листы 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 ]

0 голосов
/ 17 июня 2020

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

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');
}
0 голосов
/ 17 июня 2020

Счетчик обслуживания 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');
}
...