我试图根据“ C”列中选中的复选框隐藏某些行。
简单地说,如果选中了“选项A”,我只想显示第11-13行和第22行。如果选中了“选项B”。我只想显示第14-15行和第22行,等等。
我也想取消选择后恢复它们。这比起任何其他事情来说,都是更多的学习练习,因此我将在以后“选择多个复选框”。
我想知道那里是否也应该有一些“ for”逻辑?我只是不确定在哪里...
任何帮助或建议将不胜感激!如有需要,我们很乐意提供更多详细信息。
非常感谢
-M
答案 0 :(得分:1)
此修改如何?我认为您的情况有几个答案。因此,请将此视为其中之一。
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);
}
});
}
}
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
用作全局变量。true
中的sheet.getRange(ranges[0] + ":" + ranges[ranges.length - 1]).setValue(true);
修改为false
时,打开电子表格时,所有复选框均未选中,并显示所有行。答案 1 :(得分:-1)
function onEdit(e) {
// Replace with the name of your sheet
var sheetName = 'NameofYourSheet';
// Align the trigger to the 4 checkboxes
if (e.source.getActiveSheet().getName() != sheetName
|| e.range.rowStart < 6 || e.range.rowStart > 11 || e.range.columnStart != 3) {
return;
}
// Get checkbox values
var sh = SpreadsheetApp.getActive().getSheetByName(sheetName),
status = sh.getRange('C7:C10').getValues();
// Crude helper func
function showHideRow(v, i) {
// [[row, numberRows]]
var rows = [[11,3],[14,3],[17,3],[20,2]];
return v[0]
? sh.showRows.apply(sh, rows[i])
: sh.hideRows.apply(sh, rows[i])
};
status.forEach(showHideRow);
}