我需要帮助,我正在使用 onEdit 函数来实现基于工作表的数据 validation 。当我单独使用它时它工作正常。我可以在 Colonne 4 中选择一种类型,然后在 Colonne 5 中出现一个列表。然后我尝试根据在 Colonne 5 中所做的选择对 Colonne 7 重复此操作。我知道 onedit 函数只能在脚本中使用,所以我尝试在一个新项目中做第二个,但没有成功。因此,我尝试执行 onEdit1 和 onEdit2 并在单个 onEdit(e) 函数中调用它们,但我也没有成功。我将不胜感激。提前致谢!
///////////////////Two data validation based on two different sheet, the second depends from the first one///////////////
var ss = SpreadsheetApp.getActive();
var parameters_sheet1 = ss.getSheetByName('Bases de données');
var parameters_sheet2 = ss.getSheetByName('Validation - Quantité');
var data_sheet = ss.getSheetByName('1. Dispatching');
var campAndGroup1 = parameters_sheet1.getRange(2, 1,parameters_sheet1.getLastRow()-1,2).getValues();
var campAndGroup2 = parameters_sheet2.getRange(2, 1,parameters_sheet2.getLastRow()-1,2).getValues();
function dataval() {
var list = ["a", "b", "g"];
applyValidationToCell(list,cell);
}
function onEdit(e){
onEdit1()
onEdit2()
}
function onEdit1(e){
var activeCell= e.range;
var val = activeCell.getValue();
var r= activeCell.getRow();
var c = activeCell.getColumn();
var wsName= activeCell.getSheet().getName();
if(wsName=="1. Dispatching" && c === 4 && r>5){
if(val=== ""){
data_sheet.getRange(r,5).clearContent();
data_sheet.getRange(r,5).clearDataValidations();
} else {
var filteredGroups = campAndGroup.filter(function(g){return g[0]=== val});
var listToApply = filteredGroups.map(function(g){return g[1]});
var cell = data_sheet.getRange(r,5);
applyValidationToCell(listToApply,cell);
}
}
}
function onEdit2(e){
var activeCell= e.range;
var val = activeCell.getValue();
var r= activeCell.getRow();
var c = activeCell.getColumn();
var wsName= activeCell.getSheet().getName();
if(wsName=="1. Dispatching" && c === 5 && r>5){
if(val=== ""){
data_sheet.getRange(r,7).clearContent();
data_sheet.getRange(r,7).clearDataValidations();
} else {
var filteredGroups = campAndGroup.filter(function(g){return g[0]=== val});
var listToApply = filteredGroups.map(function(g){return g[1]});
var cell = data_sheet.getRange(r,7);
applyValidationToCell(listToApply,cell);
}
}
}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule);
}
///////////////////fin validation///////////////
回答1
您错过了传递编辑事件对象。
简单修复:替换
function onEdit(e){
onEdit1()
onEdit2()
}
经过
function onEdit(e){
onEdit1(e)
onEdit2(e)
}
注意:可以优化代码(减少代码行和执行时间),但这看起来超出了问题的范围。