所以我想用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;
}
}
我错了,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');
}
一个简单的属性服务计数器
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');
}