簡體   English   中英

根據復選框顯示和隱藏行

[英]Show & Hide Rows Based on Check Boxes

我首先要說的是,我對編碼非常缺乏經驗,因此將不勝感激任何幫助!

我試圖根據是否勾選復選框來顯示/隱藏行。 例如,我在 A5 中有一個復選框 - 如果未選中,我希望它隱藏 6:18 行,如果選中,我希望它顯示 6:18 行。

A19 中的復選框也是如此,分別隱藏/顯示 20:26 行。 A27 用於行 28:37 等。

我找到了以前的論壇帖子,我將在其中鏈接下面的代碼,但是第一個復選框隱藏所有行(例如,如果未選中 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。

  • 如果未選中“ 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

如果我誤解了您的問題,而這不是您想要的結果,我深表歉意。

如果行不為空,Tanaike代碼對我不起作用。 這對我有用:

 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 sheet = e.source.getActiveSheet(); var ranges = Object.keys(cfg); var cells = [] for(var j = 0; j < ranges.length; j++){ cells.push(sheet.getRange(ranges[j])) } if (cfg[activeRange]) { cells.forEach(function(cell, i) { if (cell.getValue()) { 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); } }); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM