在Google Scripts中做一个简单的计数器,它可以跟踪以前的值。

问题描述 投票:0回答:1

所以我想用google sheets和一个自定义函数做一个自动旋转的计划,每周从链接的表里选择一个新的员工,到了最底层后再从列表的顶部开始,用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;
  }
}
javascript google-apps-script google-sheets counter custom-function
1个回答
0
投票

我错了,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');
}

-1
投票

一个简单的属性服务计数器

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');
}
© www.soinside.com 2019 - 2024. All rights reserved.