这个修改怎么样?我认为您的情况有几个答案。因此,请将此视为其中之一。
修改点:
- 使用
onEdit() 运行脚本。 @I'-'I 提到了这一点。
- 检索所有复选框的值。
- 显示和隐藏对应于每个复选框的行。
修改后的脚本:
当你使用这个修改后的脚本时,
- 请将此脚本复制并粘贴到您的脚本编辑器中,然后保存。当您选中工作表上的复选框时,会显示和隐藏行。
- 在使用此脚本之前,请确认您的项目中没有
onEdit() 函数。
- 当您修改复选框和行的单元格时,请设置
cfg。例如,当“C7”处有一个复选框,并且行从第11行到第13行时,请设置C7: {startRow: 11, endRow: 13}。
脚本 :
function onEdit(e) {
var cfg = { // Please set this object.
C7: {startRow: 11, endRow: 13},
C8: {startRow: 14, endRow: 16},
C9: {startRow: 17, endRow: 19},
C10: {startRow: 20, endRow: 21}
};
var activeRange = e.range.getA1Notation();
var ranges = Object.keys(cfg);
if (cfg[activeRange]) {
var sheet = e.source.getActiveSheet();
var values = sheet.getRange(ranges[0] + ":" + ranges[ranges.length - 1]).getValues();
values.forEach(function(e, i) {
if (e[0]) {
sheet.showRows(cfg[ranges[i]].startRow, cfg[ranges[i]].endRow - cfg[ranges[i]].startRow);
} else {
sheet.hideRows(cfg[ranges[i]].startRow, cfg[ranges[i]].endRow - cfg[ranges[i]].startRow);
}
});
}
}
注意:
- 在此修改后的脚本中,如果多个复选框为真,则显示与每个复选框对应的行。
- 如果要在特定的sheet运行脚本,请修改为
if (cfg[activeRange] && e.source.getSheetName() == "### sheet name ###") {。
参考:
如果我误解了你的问题,请告诉我。我想修改它。
编辑:
当用户打开电子表格时,您希望显示所有行而不隐藏。如果我的理解是正确的,那又如何呢?
function onOpen(e) {
var cfg = { // Please set this object.
C7: {startRow: 11, endRow: 13},
C8: {startRow: 14, endRow: 16},
C9: {startRow: 17, endRow: 19},
C10: {startRow: 20, endRow: 21}
};
var sheet = e.source.getSheetByName("### sheet name ##");
var ranges = Object.keys(cfg);
sheet.showRows(cfg[ranges[0]].startRow, cfg[ranges[ranges.length - 1]].endRow - cfg[ranges[0]].startRow);
sheet.getRange(ranges[0] + ":" + ranges[ranges.length - 1]).setValue(true);
}
- 当您使用它时,请将其复制并粘贴到您的脚本编辑器中。
-
onOpen() 可用于在打开电子表格时运行。
- 您也可以将
cfg 用作全局变量。
- 当
sheet.getRange(ranges[0] + ":" + ranges[ranges.length - 1]).setValue(true);中的true修改为false时,当电子表格打开时,所有复选框均不勾选,显示所有行。