首页 > 解决方案 > 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 函数。

感谢您的任何见解!

标签: javascriptif-statementgoogle-sheets

解决方案


我认为您现在要做的是检查它是否不是 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 语句中的函数在满足条件后运行。

让我知道这是否可以解决您的问题。


推荐阅读