根据复选框隐藏行-Google App脚本

时间:2018-08-09 00:03:58

标签: google-apps-script google-sheets gsuite

我试图根据“ C”列中选中的复选框隐藏某些行。

简单地说,如果选中了“选项A”,我只想显示第11-13行和第22行。如果选中了“选项B”。我只想显示第14-15行和第22行,等等。

我也想取消选择后恢复它们。这比起任何其他事情来说,都是更多的学习练习,因此我将在以后“选择多个复选框”。

我想知道那里是否也应该有一些“ for”逻辑?我只是不确定在哪里...

任何帮助或建议将不胜感激!如有需要,我们很乐意提供更多详细信息。

非常感谢

-M

2 个答案:

答案 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);
      }
    });
  }
}

注意:

  • 在此修改后的脚本中,如果多个复选框为true,则显示与每个复选框相对应的行。
  • 如果要在特定页面上运行脚本,请修改为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);
}