根据复选框隐藏行 - Google 应用脚本
Hide Rows Based on Check Boxes - Google App Script
我试图根据在 'C' 列中选中的复选框隐藏某些行。
简单的说如果勾选'Option A',我只想显示第11-13行,和第22行。如果勾选'Option B'。我只想显示第 14 - 15 行和第 22 行等
我也想让它们在我取消选中后恢复原状。这更像是一个学习练习,所以我稍后会谈到 'checking multiple boxes'。
我想知道是否也应该有一些 'for' 逻辑?我只是不确定在哪里...
如有任何帮助或建议,我们将不胜感激!如果需要,很乐意了解更多细节。
非常感谢,
-M
这个修改怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。
修改点:
- 运行 脚本使用
onEdit()
。 @I'-'I. 提到了这一点
- 检索所有复选框的值。
- 显示和隐藏与每个复选框对应的行。
修改脚本:
当您使用这个修改后的脚本时,
- 请将此脚本复制并粘贴到您的脚本编辑器中,然后保存。当您选中 sheet 上的复选框时,将显示和隐藏行。
- 在使用此脚本之前,请确认您的项目中没有
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 ###") {
。
参考:
如果我误解了你的问题,请告诉我。我想修改一下。
编辑:
当用户打开 Spreadsheet 时,您想显示所有行而不隐藏。如果我的理解是正确的,这个怎么样?
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()
可以在点差sheet打开时用于运行ning。
- 你也可以使用
cfg
作为全局变量。
- 当
sheet.getRange(ranges[0] + ":" + ranges[ranges.length - 1]).setValue(true);
的true
修改为false
时,打开spreadsheet时,所有checkbox都不勾选,显示所有行
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);
}
我试图根据在 'C' 列中选中的复选框隐藏某些行。
简单的说如果勾选'Option A',我只想显示第11-13行,和第22行。如果勾选'Option B'。我只想显示第 14 - 15 行和第 22 行等
我也想让它们在我取消选中后恢复原状。这更像是一个学习练习,所以我稍后会谈到 'checking multiple boxes'。
我想知道是否也应该有一些 'for' 逻辑?我只是不确定在哪里...
如有任何帮助或建议,我们将不胜感激!如果需要,很乐意了解更多细节。
非常感谢,
-M
这个修改怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。
修改点:
- 运行 脚本使用
onEdit()
。 @I'-'I. 提到了这一点
- 检索所有复选框的值。
- 显示和隐藏与每个复选框对应的行。
修改脚本:
当您使用这个修改后的脚本时,
- 请将此脚本复制并粘贴到您的脚本编辑器中,然后保存。当您选中 sheet 上的复选框时,将显示和隐藏行。
- 在使用此脚本之前,请确认您的项目中没有
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 ###") {
。
参考:
如果我误解了你的问题,请告诉我。我想修改一下。
编辑:
当用户打开 Spreadsheet 时,您想显示所有行而不隐藏。如果我的理解是正确的,这个怎么样?
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()
可以在点差sheet打开时用于运行ning。- 你也可以使用
cfg
作为全局变量。 - 当
sheet.getRange(ranges[0] + ":" + ranges[ranges.length - 1]).setValue(true);
的true
修改为false
时,打开spreadsheet时,所有checkbox都不勾选,显示所有行
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);
}