对于Google表格,有一个复选框功能,如果选中,则写为TRUE,如果未选中,则写为FALSE。我正在尝试寻找一种方法来隐藏B列中已选中(或== TRUE)复选框的行。但是,该脚本无法正常工作,我不知道为什么。
function onOpen() {
var s = SpreadsheetApp.getActive().getSheetByName('Scrum');
s.showRows(1, s.getMaxRows());
s.getRange('B:B')
.getValues()
.forEach( function (r, i) {
if (r[0] == 'TRUE')
s.hideRows(i + 1);
});
}
答案 0 :(得分:0)
问题是标准复选框返回一个布尔值。
这可以是true
或false
,但不能是TRUE
或FALSE
,在Javascript中未定义。
因此,这些将正确测试单元格值:
if (r[0] == true) // test for boolean true
s.hideRows(i + 1);
or
if (r[0])
s.hideRows(i + 1); // test for boolean true
但不是
if (r[0] == 'TRUE') // 'TRUE' is a string value
s.hideRows(i + 1);
or
if (r[0] == TRUE) // TRUE is an undefined constant.
s.hideRows(i + 1);
现在,超级混乱的事情是公式中的true / false不区分大小写。 (正确/错误和正确/错误相同)。所以要小心!
还要注意,范围s.getRange('B:B')
是整个1000行,因此会变慢。例如,最好限制范围线B1:B20
。不确定这对您来说是个问题...
编辑:以下是一个工作脚本:
function hide() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.showRows(1, sheet.getMaxRows());
var values = sheet.getRange('E1:E7').getValues();
values.forEach( function (r, i) {
Logger.log(r);
if (r[0])
sheet.hideRows(i + 1);
});
}
脚本之前
脚本后: