在 google 电子表格中值从 TRUE 变为 FALSE 后,有没有办法停止 COUNTIF 函数?
Is there a way to stop a COUNTIF function after the value changes from TRUE to FALSE in google spreadsheets?
我有一排勾选框,我需要计算最近的连续 TRUE
个值。所以它应该在第一个 TRUE
出现时开始计数,并在它变为 FALSE
时停止,忽略之后的任何内容。
现在我有一个脚本可以做到这一点,但由于我有很多条目,所以需要很长时间才能 运行 并在 6 分钟后停止,而没有完成所有事情。
for(var j=3;j<lastRow;j++){
count = 0;
for (var k=stupac-1;k>2;k--){
if (range.getCell(j,k).getValue() == true){
count++;
}
else if ((range.getCell(j,k).isChecked() == false)&&(count>0)){
break;
}
}
range.getCell(j,stupac).setValue(count);
}
我认为最好的方法是在值发生变化时停止 COUNTIF,但一直没有成功。
我想出了这个看起来相当快的解决方案。您的方法遍历每个 cell,这效率不高,尤其是当搜索 space 很大时。以下方法迭代指定 data
范围内的 行 。
function myFunction() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1');
const data = sh.getRange('A3:G'+sh.getLastRow()).getValues();
const counts = [];
data.forEach(row=>{
let t_index = row.indexOf(true);
let cutRow = t_index > -1 ? row.slice(t_index, row.length+1) : [];
let f_index = cutRow.indexOf(false);
let ct = f_index > -1 ? f_index : cutRow.length;
counts.push([ct]);
});
sh.getRange(3,8,counts.length,counts[0].length).setValues(counts);
}
请根据需要调整数据范围。
这里的解决方案匹配以下文件:
请确保您已启用 V8 Runtime。
我有一排勾选框,我需要计算最近的连续 TRUE
个值。所以它应该在第一个 TRUE
出现时开始计数,并在它变为 FALSE
时停止,忽略之后的任何内容。
现在我有一个脚本可以做到这一点,但由于我有很多条目,所以需要很长时间才能 运行 并在 6 分钟后停止,而没有完成所有事情。
for(var j=3;j<lastRow;j++){
count = 0;
for (var k=stupac-1;k>2;k--){
if (range.getCell(j,k).getValue() == true){
count++;
}
else if ((range.getCell(j,k).isChecked() == false)&&(count>0)){
break;
}
}
range.getCell(j,stupac).setValue(count);
}
我认为最好的方法是在值发生变化时停止 COUNTIF,但一直没有成功。
我想出了这个看起来相当快的解决方案。您的方法遍历每个 cell,这效率不高,尤其是当搜索 space 很大时。以下方法迭代指定 data
范围内的 行 。
function myFunction() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1');
const data = sh.getRange('A3:G'+sh.getLastRow()).getValues();
const counts = [];
data.forEach(row=>{
let t_index = row.indexOf(true);
let cutRow = t_index > -1 ? row.slice(t_index, row.length+1) : [];
let f_index = cutRow.indexOf(false);
let ct = f_index > -1 ? f_index : cutRow.length;
counts.push([ct]);
});
sh.getRange(3,8,counts.length,counts[0].length).setValues(counts);
}
请根据需要调整数据范围。
这里的解决方案匹配以下文件:
请确保您已启用 V8 Runtime。