在 Google 脚本中制作一个简单的计数器,用于跟踪先前的值
Make a simple counter in Google Scripts which keeps track of previous value
所以我正在尝试使用 google sheets 和一个自定义函数来制作一个自动轮换时间表,该函数每周从链接的 sheet 中选择一名新员工,然后当它到达底部时再次从列表顶部开始,使用 Google 触发器每 7 天 运行 计数器。
我很难弄清楚如何每周在 spreadsheet 中存储一个值来存储计数器的值,然后在函数 运行s 时引用相同的值再次更新计数器。
我也遇到了一个问题,我的传播sheet 在我当前的输出中抛出了 'result was not a number' 错误,可能是因为它指的是它自己,我不知道如何初始化当它只能将公式存储在它引用的单元格中时计数器。
这是我的资料:
/* 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;
}
}
一个简单的属性服务计数器
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');
}
我错了,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');
}
所以我正在尝试使用 google sheets 和一个自定义函数来制作一个自动轮换时间表,该函数每周从链接的 sheet 中选择一名新员工,然后当它到达底部时再次从列表顶部开始,使用 Google 触发器每 7 天 运行 计数器。
我很难弄清楚如何每周在 spreadsheet 中存储一个值来存储计数器的值,然后在函数 运行s 时引用相同的值再次更新计数器。
我也遇到了一个问题,我的传播sheet 在我当前的输出中抛出了 'result was not a number' 错误,可能是因为它指的是它自己,我不知道如何初始化当它只能将公式存储在它引用的单元格中时计数器。
这是我的资料:
/* 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;
}
}
一个简单的属性服务计数器
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');
}
我错了,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');
}