根据多个复选框值隐藏行

Hide rows based on multiple checkbox values

我正在做的项目是计算手机游戏中剩余套数的成本。它有一个包含所有集合列表的电子表格,以及所有 5 件的复选框,列 B:F。我想包括隐藏所有已完成集的选项,因此所有复选框都被选中。这是通过另一个复选框 H16 完成的。

我已将复选框值修改为使用是和否。

我以前从未使用过 Google Apps 脚本,总体上对编码非常陌生。我认为我需要的是使用 onEdit,然后每次编辑一个单元格时,检查 H16 是否为 TRUE,然后扫描每一行以检查 B:F 值。如果全部为真,则隐藏该行。不过,我不知道最好的输入方式。

奖励积分,我还想包括一个重置复选框,所以选中后,将 B:F 中的所有值设置为 false,并显示行。 Here is a link to the spreadsheet

编辑:我当前的 GAS 代码,这并不多,因为我不知道我在做什么:

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var maxSheet = 100;
  if(H16 == true)
  {
    for(i, i<=maxSheet, i = i + 1) {

    }
  } else {
    sheet.showRows(1, maxSheet);
  }

}

当所有五列都为真时隐藏行

这可能不是您想要的,但我认为它很接近。我没有使用 yes 和 no 值,因为我更容易将其保留为 true false,但您可以更改它。我正在使用 Sheet0,您也可以更改它。我使用的行数较少,因此您也可以更改它。但基本思想是,当单击 H16 时,它会隐藏已选中所有五列的行。

代码:

function onEdit(e) {
  e.source.toast('entry');//debug
  const sh = e.range.getSheet();
  const sr = 2;//data start row
  const lr = 15;//last row of data
  sh.getRange('K1').setValue(JSON.stringify(e));//debug
  if(sh.getName() == "Sheet0" && e.range.columnStart == 8 && e.range.rowStart == 16 & e.value == "TRUE" ) {
    e.source.toast('past if');//debug
    e.range.setValue("FALSE");
    let vs = sh.getRange(sr,2,lr - sr + 1, 5).getValues();
    vs.forEach((r,i) => {
       if(r[0] && r[1] && r[2] && r[3] && r[4]) {
         e.source.toast(`Row: ${sr + i}`);//debug
         sh.hideRows(sr + i);
       }
    });
  }
}

工作表 0 的图像:

我在调试脚本时使用 K1 为我提供事件对象。我还在几个位置使用 e.source.toast 来了解发生了什么。

动画:

an incomplete description of the event object

您可以使用我示例中显示的 JSON.stringify 代码更好地理解事件对象。

大多数新手都想 运行 来自脚本编辑器的代码,所以我会提前告诉您,除非您提供事件对象来填充 e,否则它将无法工作。只需复制并粘贴它,即可获得独特的设置,例如 sheet 名称和数据 space,然后继续编辑页面并弄清楚它是如何工作的。