google-apps-script - 选中另一个复选框时要打开的复选框数组
问题描述
我正在为探路者角色创建一个谷歌表(第 2 版)。技能系统由等级表示,并在标准字符表上显示为一排复选框。如果一个等级被选中,那么它下面的所有等级也应该被选中,上面的框应该被取消选中。
在下面的示例中,由于选中了“E”,因此还必须选中“T”。如果玩家随后检查“L”,那么“M”也应该被检查。在相反的情况下,如果玩家取消选中“T”,那么“E”也应该被取消选中。
实际上,只有五种可能的组合。
可以为复选框提供一个公式,我已经将这个公式用于“T”。而且我了解如何级联这样的公式。但是这个公式在这种情况下是行不通的。
=IF(I11,TRUE,FALSE)
我可以使用复选框右侧的下拉菜单并根据它设置它们的状态,但我不喜欢它的外观。它打破了从字符表到电子表格的转换。
我想要一个类似事件的东西,我可以用它来根据用户操作设置值。
解决方案
我在 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();
}
}
}
您可以在此电子表格中测试此解决方案。
基本上背后的逻辑是两个选项。
- 当您选中一个框时,它将选中左侧的所有其他框
- 当您取消选中一个框时,它将取消选中右侧的所有其他框
如果您查看您的代码,您会注意到我已经硬编码了列的位置(训练、专家、大师、图例),并假设复选框将彼此相邻,其中训练是第一个,图例是最后一个。
因此,如果您的复选框将位于另一列中,只需更改代码中的数字即可。
但是对于您提供此解决方案的情况,您应该足够了。
参考
推荐阅读
- flutter - 三元运算符 dart flutter null。类型'Null'不是布尔表达式中的'bool'
- r - 如何将 o 命令发送到 R 进程
- r - R 闪亮。没有适用于“c('reactiveExpr', 'reactive', 'function')”类对象的“mutate”方法
- python - 机械化在网页上找不到 URL
- c++ - 为什么 C++ 链接器不抱怨缺少这些函数的定义?
- html - 如果有子元素,则应用 css
- typescript - 为什么 cypress 在 for 循环中只循环一次
- python - 大家好,有人可以帮我解决这个问题吗
- spring-boot - Google 跟踪代码管理器 - 从后端发送 dataLayer
- postgresql - 如何在sqlalchemy中指定一个字符串主键并直接输入?