javascript - Google Apps 在 onEdit 函数中编写多个 IF 语句
问题描述
背景
我正在尝试编写一个脚本来检查两个不同的单元格以查看复选框是否已被选中。因此,它将首先检查一个单元格 (AL4) 以查看该值是否为真,然后检查另一个单元格 (Q4) 以查看该值是否为真。如果该值为 true,那么它将运行不同的函数。
我正在检查的两个单元格都在同一个工作表“仪表板”中,因此它不必找到不同的工作表名称。我通过使用 .getcolumn 和 .getrow 命令使用不同的方法来检查不同的单元格,但我也遇到了一些麻烦。我还遇到了一些问题,它会忽略 if 语句并在每次编辑时运行该函数,而不仅仅是在检查两个单元格时。
如何让 if 和 else if 语句在同一个 onEdit 函数中工作?
当前脚本
function onEdit(e) {
const sheetName = "Dashboard"
var range = e.range;
if (range.getSheet().getSheetName() != sheetName || range.getA1Notation() != "AL4" || !range.isChecked()) {
return;
RefreshCheckmark2();
} else if (range.getSheet().getSheetName() != sheetName || range.getA1Notation() != "Q4" || !range.isChecked()) {
return;
InverseYieldRefresh();
}
}
此外,如果您删除 else if 语句和第一个 If 语句后的括号,上述代码是完全可用的。
理想情况下,我希望能够添加更多 else if 语句,以便它可以检查更多单元格,因为我喜欢让复选框运行命令,如果我的理解是正确的,那么在单个电子表格中不能有多个 onEdit 函数。
感谢您的任何见解!
解决方案
我认为您现在要做的是检查它是否不是 AL4 或 Q4,而不是检查它是 AL4 还是 Q4。此外,在您当前的代码中,您return;
在运行任何函数之前使用它,因此即使它进入您的 if 语句,它也会真正跳过运行该函数。你可以试试下面的代码:
function onEdit(e) {
const sheetName = "Dashboard"
var range = e.range;
if (range.getSheet().getSheetName() == sheetName && range.getA1Notation() == "AL4" && range.isChecked()) {
RefreshCheckmark2();
}
else if (range.getSheet().getSheetName() == sheetName && range.getA1Notation() == "Q4" && range.isChecked()) {
InverseYieldRefresh();
}
}
我只更改了条件以检查它是 AL4 还是 Q4,然后删除了return;
以使 if 语句中的函数在满足条件后运行。
让我知道这是否可以解决您的问题。
推荐阅读
- c++ - 在 Visual Studio 中,c++ 项目主管之外的第 3 方文件(如glad.h 和 glfw3.lib)的常见结构是什么?
- javascript - 在完成代码执行之前快速请求返回
- verilog - 多驱动网络,或 reg 未被驱动
- c# - 从左、右、上和下创建矩形
- python - 最优雅的(pythonic)方式来获取列表列表中的第 i 个元素,并创建这些第 i 个元素的列表
- gstreamer - 在ubuntu上运行gstreamer通过RTSP发送视频太慢了
- python - 如何在用户拖动时修复网格行和列中的小部件?
- angular - 我正在使用 ngbootstrap。默认情况下,第一个选项卡处于活动状态。但我希望第二个选项卡需要处于活动状态而不是第一个
- python - Sublime Text 3 - 加载语法文件“Packages/JavaScript/JSON.sublime-syntax”时出错
- javascript - (JavaScript) 我得到的唯一输出是“[Function: whoBigger]”。有谁知道为什么我的功能不起作用?