如何使用脚本在 Google 工作表中获取下一个未过滤的行号(从当前行向下一个)?
How to get the next not filtered row number (one down from current row) in Google Sheets with script?
我想在A1中设置值(下一个未过滤的行号)。使用函数 isRowHiddenByFilter,我在另一个上下文中经历了长达 15 秒的时间。希望执行速度会更快。
var s = SpreadsheetApp.getActive().getActiveSheet();
function a() {
var x = s.getCurrentCell().getRow();
for(y = 1; s.isRowHiddenByFilter(x); ++y);
s.getRange('A1').setValue(x);
}
我试过的下一种方法不起作用
var s = SpreadsheetApp.getActive().getActiveSheet();
function a() {
var lastColumn = s.getActiveRange().getLastColumn();
var x = s.getActiveRange().offset(1, -lastColumn+1).getValue();
var y = s.getRange('D1').setValue(x);
}
D1的公式
=MATCH(D1, A:A, 0)
在您分享的第一个代码片段中,您在 for
循环的 每次迭代 中检查当前选定的行是否被过滤器隐藏。您应该在每次迭代中检查不同的行,因此您应该使用循环索引。
例如,您可以这样做:
function nextNotFilteredRow() {
var s = SpreadsheetApp.getActive().getActiveSheet();
var startRow = s.getCurrentCell().getRow() + 1;
for (var i = startRow; i <= s.getLastRow(); i++) {
if (!s.isRowHiddenByFilter(i)) {
s.getRange('A1').setValue(i);
return;
}
}
}
参考:
我想在A1中设置值(下一个未过滤的行号)。使用函数 isRowHiddenByFilter,我在另一个上下文中经历了长达 15 秒的时间。希望执行速度会更快。
var s = SpreadsheetApp.getActive().getActiveSheet();
function a() {
var x = s.getCurrentCell().getRow();
for(y = 1; s.isRowHiddenByFilter(x); ++y);
s.getRange('A1').setValue(x);
}
我试过的下一种方法不起作用
var s = SpreadsheetApp.getActive().getActiveSheet();
function a() {
var lastColumn = s.getActiveRange().getLastColumn();
var x = s.getActiveRange().offset(1, -lastColumn+1).getValue();
var y = s.getRange('D1').setValue(x);
}
D1的公式
=MATCH(D1, A:A, 0)
在您分享的第一个代码片段中,您在 for
循环的 每次迭代 中检查当前选定的行是否被过滤器隐藏。您应该在每次迭代中检查不同的行,因此您应该使用循环索引。
例如,您可以这样做:
function nextNotFilteredRow() {
var s = SpreadsheetApp.getActive().getActiveSheet();
var startRow = s.getCurrentCell().getRow() + 1;
for (var i = startRow; i <= s.getLastRow(); i++) {
if (!s.isRowHiddenByFilter(i)) {
s.getRange('A1').setValue(i);
return;
}
}
}