我正在尝试使用Google Apps脚本在Google表格中创建自定义功能,但是当条件为假时,它不会单独留下单元格,而是删除那里的内容并将其留空,当我需要它时只需& #34;什么都不做" (留下最后一个值)。我的脚本是:
function score(a,b) {
var today = new Date();
var deadline = new Date(a);
if (today <= deadline && b != 0){
return b;
}
}
这里的想法是,每天函数都会显示一个单元格值(&#34; b&#34;),它每天也会更改其内容,直到在另一个单元格中设置的某一天(&#34; a&#34;),然后留下放在那里的最后一个值。这里的问题是,在第二天,它不是留下最后一个值,而是将单元格留空。
自定义函数最终为=SCORE(F10,B10)
(F10是截止日期,B10的值每天都在变化。自定义函数在H1中。)
我试过把&#34;其他&#34;条件,但也没有工作(像else {return;}或者其他{return false;}),但没有任何效果。我该怎么做才能把最后一个值放在那里。有没有办法在某个地方保存最后一个值然后把它放在那里如果没有办法放一个if ... else&#34;什么都不做&#34;?
答案 0 :(得分:0)
我建议再次查看你的整个逻辑。我只会给你写一个示例脚本:
function mainFunction(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var myRange = sheet.getRange(1, 1);
doNothing(myRange.getValue());
}
function doNothing(a){
if(a <= 100){
Logger.log("less than or equal to 100");
}else{
}
}
当值为100时,它满足条件:
[18-01-21 ] less than or equal to 100
当值大于100时,它什么都不做,日志上没有打印任何内容。
答案 1 :(得分:0)
与onEdit触发器相反,自定义函数在开始重新计算之前无法获取值。
为了验证这一点,我做了以下自定义功能
/**
*
* @param {number} newValue
* @customfunction
*/
function test(newValue) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var cell = ss.getActiveCell();
var oldValue = cell.getValue();
return [[newValue,oldValue]];
}
值和公式
| A | B | C |
--+---------|---------------|-------------|
1| 1|=test(A1) | |
结果
| A | B | C |
--+---------|---------------|-------------|
1| 1| 1|#ERROR! |
另一种方法是使用“属性服务”来存储旧值
实施例
以下功能是对上述示例的改进,仅用于显示属性服务的使用。
/**
*
* @param {number} newValue
* @customfunction
*/
function test2(newValue) {
var DocumentProperties = PropertiesService.getDocumentProperties();
var key = 'test2:' +
SpreadsheetApp
.getActiveSpreadsheet()
.getActiveCell()
.getA1Notation();
var oldValue = DocumentProperties.getProperty(key);
DocumentProperties.setProperty(key, newValue);
return [[newValue, parseInt(oldValue,10)]];
}
注意:
将上述内容应用于问题函数的一种方法如下:
function score(a,b) {
var DocumentProperties = PropertiesService.getDocumentProperties();
var key = 'score:' + SpreadsheetApp
.getActiveSpreadsheet()
.getActiveCell()
.getA1Notation();
var oldValueString = DocumentProperties.getProperty(key);
var today = new Date();
var deadline = new Date(a);
if (today <= deadline && b != 0){
DocumentProperties.setProperty(key, b);
return b;
} else {
return parseInt(oldValueString,10);
}
}
相关