validation - 数据 validation 基于第一个数据 validation 在同一脚本中使用两个 onEdit 函数

我需要帮助,我正在使用 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)
}

注意:可以优化代码(减少代码行和执行时间),但这看起来超出了问题的范围。

相似文章

随机推荐

最新文章