我需要帮助来简化我的脚本。我有两个脚本需要合二为一
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 中的复选框被切换时,所有示例下拉列表和复选框都会被重置。
希望对您有所帮助。
我在 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 中的复选框被切换时,所有示例下拉列表和复选框都会被重置。
希望对您有所帮助。