根据复选框隐藏行 - 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);
}