【问题标题】:Hide rows based on multiple checkbox values根据多个复选框值隐藏行
【发布时间】:2021-10-18 21:27:50
【问题描述】:

我正在进行的项目是计算手机游戏中剩余套装的成本。它有一个包含所有集合列表的电子表格,以及所有 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);
  }

}

【问题讨论】:

  • 您能否分享您目前编写的 Apps 脚本,如果可能的话,可以分享您的电子表格的只读副本,以便我们更好地了解发生了什么?
  • 嗯,到目前为止,我还没有真正在脚本中写太多东西,因为我不知道自己在做什么。我还认为这是我在原始帖子中链接的只读副本?函数 onEdit(e) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var maxSheet = 100; if(H16 == true) { for(i, i
  • 请提供您所说的工作表的图片。我们中的一些人不关注电子表格的链接,我就是其中之一。

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


【解决方案1】:

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

这可能不是你想要的,但我认为它很接近。我没有使用 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);
       }
    });
  }
}

Sheet0 的图像:

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

动画:

an incomplete description of the event object

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

大多数新人都想从脚本编辑器运行代码,所以我会提前告诉你,除非你提供事件对象来填充 e,否则它不会工作。只需复制并粘贴它,为您设置独特的东西,如工作表名称和数据空间,然后继续编辑页面并弄清楚它是如何工作的。

【讨论】:

  • 非常感谢库珀!虽然它不是我想要的 100%,但它可以在这种情况下工作。也就是说,我无法让代码在我的项目中工作。我更改了代码中的“TRUE”和“FALSE”以匹配我的“是/否”值,并将 sh.getName 更改为“Main”,但它不会隐藏行。我清楚地看到它在你的动画中工作,所以我会继续修补,但想看看是否有一些明显的东西我错过了。编辑:
  • 我在第 12 行中发现了一个 & 符号,使其双倍允许隐藏行,但它隐藏了任何行。我将第 12 行更改为以下内容,现在它按预期工作。谢谢你的帮助! if(r[0] == "是" && r[1] == "是" && r[2] == "是" && r[3] == "是" && r[4] == "是") {
  • 我明天很乐意为您提供帮助。我今天做了小手术,还在恢复中
  • 是的,我想告诉你我只是使用了标准复选框,它们是真/假
猜你喜欢
  • 2022-07-07
  • 1970-01-01
  • 2013-01-29
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2013-02-10
相关资源
最近更新 更多