根据带有公式的复选框隐藏不同的列集

问题描述 投票:0回答:1

使用 Google 表格,如果选中某个复选框,我想隐藏一组特定的列。我想对多组列和多个复选框执行此操作。复选框是根据引用另一个单元格的公式进行检查的。

例如: 如果选中 A1 复选框,我想隐藏 I:L 列。如果选中 A2 复选框,我想隐藏 N:Q 列,依此类推。此外,A 列中的所有复选框都会被选中或取消选中,具体取决于 B 列中同一行中的单元格中是否有任何文本。

我写了以下脚本:

function onEdit(e) {
  let col = 0;
  switch(e.range.getA1Notation()) {
    case "A1":
      col = 9;
      break;
    case "A2":
      col = 14;
      break;
    case "A3":
      col = 19;
      break;
    default:
      return;
  }
  if( e.value === "FALSE" ) {
    e.source.getActiveSheet().hideColumns(col,4)
  }
  else {
    e.source.getActiveSheet().showColumns(col,4)
  }
}

此脚本的问题是,它取决于通过取消选中复选框将复选框单元格更改为“False”。由于复选框有一个公式来选中或取消选中它,因此它不会触发脚本进去影响。如果我删除复选框公式并手动选中或取消选中它,脚本将正常工作。 B 列中的文本根据 C1 中的放置选择进行填充。我很想在每次切换下拉菜单时触发此列隐藏脚本。

回顾一下:

选择了 C1 中的下拉菜单。 B 列的填充取决于所做的下拉选择。 如果 B 列的单元格中有任何文本,则 A 列中的复选框将被选中。这是由为每个复选框单元格设置的公式自动执行的。 如果未选中 A1 中的复选框,我希望隐藏 I:L 列。如果未选中 A2 中的复选框,我希望隐藏 N:Q 列,依此类推。 我希望每次选择不同的下拉菜单时都会触发此操作。

谢谢!

google-sheets google-apps-script triggers hide
1个回答
0
投票

简单触发器仅在用户激活时运行

当用户更改电子表格中任何单元格的值时,onEdit(e) 触发器会自动运行。

因此,您只需要检查编辑的单元格确实是 C1,在这种情况下,您可以浏览每个复选框以查看它们是否被选中,并相应地(取消)隐藏列。

以下代码应该可以实现您想要的功能:

function onEdit(e) {
  let col = 9;
  const sheet = e.source.getActiveSheet();
  if (e.range.getA1Notation() !== "C1") {
    return;
  }
  for (let i=0; i<3; i++, col+=5) {
    sheet.getRange(i+1, 1).getValue() ?
      sheet.showColumns(col, 4) :
      sheet.hideColumns(col, 4);
  }
}

工作原理:

  • 如果编辑的单元格不是C1,则停止;
  • 如果是,它会检查 A 列中从第 i+1=1 行到第 i+1=3 行的每个单元格,在这种情况下(但你显然可以更改它);
  • 对于 A 列中的每个单元格,隐藏或取消隐藏 4 列 - 根据其值,使用三元运算符:在 A1 的情况下从第 9 列开始,并以 5 为步长前进。

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.