根据复选框显示和隐藏行

时间:2019-08-19 23:55:59

标签: javascript google-apps-script google-sheets triggers javascript-objects

首先,我对编码非常缺乏经验,因此对您的帮助将不胜感激!

我正在尝试根据是否选中复选框来显示/隐藏行。例如,我在A5中有一个复选框-如果未选中,则希望它隐藏6:18行,如果选中,则希望它显示6:18行。

A19中的复选框也是如此,以分别隐藏/显示20:26行。对于行28:37等,则为A27。

我找到了以前的论坛帖子,我将在其中链接下面的代码,但是第一个复选框隐藏了所有行(例如,如果未选中A5,则它将隐藏6:18、20:26和28行: 37.然后选中它,仅显示6:18行。

function onEdit(e) {
  var cfg = { // Please set this object.
    A5: {startRow: 6, endRow: 18},
    A19: {startRow: 20, endRow: 26},
    A27: {startRow: 28, endRow: 37},
  };

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

如前所述,第一个复选框将隐藏所有行(例如,如果未选中A5,则它将隐藏行6:18、20:26和28:37。然后选中该复选框,则仅显示第6行: 18。

1 个答案:

答案 0 :(得分:1)

  • 当未选中“ A5”复选框时,您想隐藏6至18行。
  • 当未选中“ A19”复选框时,您想隐藏20至26行。
  • 当未选中“ A27”复选框时,您想隐藏28至37行。
  • 选中此复选框后,您要显示行。
  • 您想通过将OnEdit事件触发器与Google Apps脚本一起使用来实现以上目标。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

发件人:

var values = sheet.getRange(ranges[0] + ":" + ranges[ranges.length - 1]).getValues();
values.forEach(function(e, i) {
  if (e[0]) {

收件人:

var values = sheet.getRange(ranges[0] + ":" + ranges[ranges.length - 1]).getValues().filter(String); // Modified
values.forEach(function(e, i) {
  if (e[0] === true) { // Modified

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。