首页 > 解决方案 > 选中另一个复选框时要打开的复选框数组

问题描述

我正在为探路者角色创建一个谷歌表(第 2 版)。技能系统由等级表示,并在标准字符表上​​显示为一排复选框。如果一个等级被选中,那么它下面的所有等级也应该被选中,上面的框应该被取消选中。

在下面的示例中,由于选中了“E”,因此还必须选中“T”。如果玩家随后检查“L”,那么“M”也应该被检查。在相反的情况下,如果玩家取消选中“T”,那么“E”也应该被取消选中。

实际上,只有五种可能的组合。

在此处输入图像描述

可以为复选框提供一个公式,我已经将这个公式用于“T”。而且我了解如何级联这样的公式。但是这个公式在这种情况下是行不通的。

=IF(I11,TRUE,FALSE)

我可以使用复选框右侧的下拉菜单并根据它设置它们的状态,但我不喜欢它的外观。它打破了从字符表到电子表格的转换。

我想要一个类似事件的东西,我可以用它来根据用户操作设置值。

标签: google-apps-scriptcheckboxgoogle-sheets

解决方案


我在 Apps Script 中为你做了一个解决方案。

function onEdit(e) {
  var ss = e.source;
  var cell = e.range;

  var trainedCol = 1; // A
  var expertCol = 2;  // B
  var masterCol = 3;  // C
  var legendCol = 4;  // D

  if(cell.getColumn() >= trainedCol && cell.getColumn() <= legendCol){
    if(e.value == "TRUE"){
      // When you Check it checks all the column on the left 
      var newRange = cell.offset(0, - (cell.getColumn() - trainedCol) , 1, cell.getColumn() - trainedCol);

      newRange.check();
    }

    if(e.value == "FALSE"){
      // When you uncheck it unchecks all the columns on the right 
      var newRange = cell.offset(0, 1 , 1, legendCol - cell.getColumn());

      newRange.uncheck();

    }
  }
}

您可以在此电子表格中测试此解决方案。

基本上背后的逻辑是两个选项

  1. 当您选中一个框时,它将选中左侧的所有其他框
  2. 当您取消选中一个框时,它将取消选中右侧的所有其他

如果您查看您的代码,您会注意到我已经硬编码了列的位置(训练、专家、大师、图例),并假设复选框将彼此相邻,其中训练是第一个,图例是最后一个。

因此,如果您的复选框将位于另一列中,只需更改代码中的数字即可。

但是对于您提供此解决方案的情况,您应该足够了。

参考


推荐阅读