我需要帮助来简化我的脚本。我有两个脚本需要合二为一

I need help simplifying my script. I have two scripts I need combined into one

我在 google sheet 中有两个单独的脚本,它们由“TRUE”值复选框触发。第一个脚本设置为取消选中 sheet 中的所有复选框,第二个脚本重置下拉列表。我将 post 下面的代码用于这两个脚本。最后,我希望两个条件都 运行 在一个复选框上。如果代码可以用更简单的方式编写,那也不是坏事。

此致,乔恩

脚本 1:

function onEdit(e) {
  if (e.range.getSheet().getName() == 'Audits') {
    if (e.range.getA1Notation() == 'J27' && e.value == "TRUE") {
      e.range.setValue("FALSE");
      var ss = SpreadsheetApp.getActive();
      var sh = ss.getActiveSheet();
      var rg = sh.getDataRange();
      var vA = rg.getDataValidations();
      var cbA = [];
      for (var i = 0; i < vA.length; i++) {
        for (var j = 0; j < vA[i].length; j++) {
          var rule = vA[i][j];
          if (rule != null) {
            var criteria = rule.getCriteriaType();
            if (criteria == SpreadsheetApp.DataValidationCriteria.CHECKBOX) {
              sh.getRange(i + 1, j + 1).setValue(null)

            }
          }
        }
      }
    }
  }
}

脚本 2

function onEdit(e) {
  if (e.range.getSheet().getName() == 'Audits') {
    if (e.range.getA1Notation() == 'E27' && e.value == "TRUE") {
      e.range.setValue("FALSE");
      var ss = SpreadsheetApp.getActive();
      var sh = ss.getActiveSheet();
      var rg = sh.getDataRange();
      var vA = rg.getDataValidations();
      var cbA = [];
      for (var i = 0; i < vA.length; i++) {
        for (var j = 0; j < vA[i].length; j++) {
          var rule = vA[i][j];
          if (rule != null) {
            var criteria = rule.getCriteriaType();
            if (criteria == SpreadsheetApp.DataValidationCriteria.VALUE_IN_LIST) {
              sh.getRange(i + 1, j + 1).setValue(null)

            }
          }
        }
      }
    }
  }
}

为了合并和简化您的脚本,我在 if 语句之外提取了两个脚本共有的变量声明,然后直接将第二个脚本的条件的条件语句添加到第一个条件中,使用or 语句 (||) 如下所示:

function onEdit(e) {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();
  var rg = sh.getDataRange();
  var vA = rg.getDataValidations();
  if (e.range.getSheet().getName() == 'Audits') {
    if (e.range.getA1Notation() == 'E27' && e.value == "TRUE") {
      e.range.setValue("FALSE");
      for (var i = 0; i < vA.length; i++) {
        for (var j = 0; j < vA[i].length; j++) {
          var rule = vA[i][j];
          if (rule != null) {
            var criteria = rule.getCriteriaType();
            if (criteria == SpreadsheetApp.DataValidationCriteria.CHECKBOX || criteria == SpreadsheetApp.DataValidationCriteria.VALUE_IN_LIST) {
              sh.getRange(i + 1, j + 1).setValue(null)
            }
          }
        }
      }
    }
  }
}

为了测试脚本的功能,我创建了以下设置:

当单元格 E27 中的复选框被切换时,所有示例下拉列表和复选框都会被重置。

希望对您有所帮助。