使用 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 列,依此类推。 我希望每次选择不同的下拉菜单时都会触发此操作。
谢谢!
简单触发器仅在用户激活时运行:
当用户更改电子表格中任何单元格的值时,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);
}
}
工作原理: