我试图找到一个工作代码,如果该行的 F 列中的复选框被选中,该代码将自动隐藏该行。
我已经尝试了我找到的每个脚本,但似乎没有任何效果。不幸的是,我不懂代码,无法找到问题所在。
这是我目前拥有的:
function onOpen() {
var s = SpreadsheetApp.getActive().getSheetByName("Checklists");
s.showRows(1, s.getMaxRows());
s.getRange('F2:F200')
.getValues()
.forEach( function (r, i) {
if (r[0] == "TRUE")
s.hideRows(i + 1);
});
}
我正在处理的工作表是“ list ”,包含复选框的列是 F。复选框的值是 TRUE 或 FALSE。如果值为 TRUE,我希望隐藏该行。
有人可以帮忙吗!!!
最佳答案
我能够运行的快速测试是在 F 列中设置一列复选框,然后创建一个函数来捕获工作表上的每个编辑事件。当用户选中一个框然后隐藏该行时,这将立即捕获。
使用 onEdit
事件的诀窍在于确定哪个单元格实际被更改。在您的情况下,如果更改发生在 F 列中的复选框,您只想完全遵循您的逻辑。在我的代码中,我一直在使用一个函数来确保更改在所需范围内。该函数如下所示:
function isInRange(checkRange, targetCell) {
//--- check the target cell's row and column against the given
// checkrange area and return True if the target cell is
// inside that range
var targetRow = targetCell.getRow();
if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
var targetColumn = targetCell.getColumn();
if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
//--- the target cell is in the range!
return true;
}
那么您的所有 onEdit
函数必须做的就是在触发编辑事件时快速调用以查看更改是否在您要查找的范围内。在这种情况下,我设置了一个包含我的范围的变量来检查:
var thisSheet = SpreadsheetApp.getActiveSheet();
var checkRange = thisSheet.getRange("F2:F200");
if (isInRange(checkRange, eventObj.range)) {
之后,只需选择行号并隐藏或显示即可。这是完整的示例解决方案:
function isInRange(checkRange, targetCell) {
//--- check the target cell's row and column against the given
// checkrange area and return True if the target cell is
// inside that range
var targetRow = targetCell.getRow();
if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
var targetColumn = targetCell.getColumn();
if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
//--- the target cell is in the range!
return true;
}
function onEdit(eventObj) {
//--- you could set up a dynamic named range for this area to make it easier
var thisSheet = SpreadsheetApp.getActiveSheet();
var checkRange = thisSheet.getRange("F2:F200");
if (isInRange(checkRange, eventObj.range)) {
//--- so one of the checkboxes has changed its value, so hide or show
// that row
var checkbox = eventObj.range;
var rowIndex = checkbox.getRow();
Logger.log('detected change in checkbox at ' + checkbox.getA1Notation() + ', value is now ' + checkbox.getValue());
if (checkbox.getValue() == true) {
Logger.log('hiding the row');
thisSheet.hideRows(rowIndex, 1);
} else {
Logger.log('showing the row');
thisSheet.showRows(rowIndex, 1);
}
}
}
关于checkbox - 选中复选框时隐藏行的 Google 表格脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54316166/