javascript - 第一个依赖数据验证下拉列表工作正常,随后返回 "Undefined"

标签 javascript

“选项”都应根据“类别”输入创建一个数据验证下拉列表。 ManualAutomatic 和选项 A 工作正常并返回正确的下拉菜单。选项 B 到 E 返回仅包含“未定义”的数据验证下拉列表

我是 Google 脚本新手。我从 Learn Google Spreadsheet 的教程开始,并从那里开始构建。如果我提出的问题在其他地方已经得到解答,我提前表示歉意。

var mainWsName = "Bid Sheet";
var nameData = "Data";
var Category = 1;
var ManualAutomatic = 2;
var OptionA = 3;
var OptionB = 4;
var OptionC = 5;
var OptionD = 6;
var OptionE = 7;


var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mainWsName);
var wsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(nameData);
var manAutoOption = wsData.getRange(2, 1,wsData.getLastRow()-1,3).getValues();


function onEdit(e){
  var activeCell = e.range;
  var val = activeCell.getValue();
  var r = activeCell.getRow();
  var c = activeCell.getColumn();
  var wsName = activeCell.getSheet().getName();
  if (wsName === mainWsName && c === Category && r > 3){
    OptionsValidation (val,r);
  } else if(wsName === mainWsName && c === ManualAutomatic && r > 3){
    NothingScriptRemove (val,r);
  }//NothingScriptRemove is useless find a way to remove without breaking


}//end onEdit

function OptionsValidation (val,r){
     if(val === ""){ 
      ws.getRange(r,ManualAutomatic).clearContent();
      ws.getRange(r,ManualAutomatic).clearDataValidations();
      ws.getRange(r,OptionA).clearContent();
      ws.getRange(r,OptionA).clearDataValidations();
      ws.getRange(r,OptionB).clearContent();
      ws.getRange(r,OptionB).clearDataValidations();
      ws.getRange(r,OptionC).clearContent();
      ws.getRange(r,OptionC).clearDataValidations();
      ws.getRange(r,OptionD).clearContent();
      ws.getRange(r,OptionD).clearDataValidations();
      ws.getRange(r,OptionE).clearContent();
      ws.getRange(r,OptionE).clearDataValidations();
    } else {
      ws.getRange(r,ManualAutomatic).clearContent();
      ws.getRange(r,OptionA).clearContent();
      ws.getRange(r,OptionB).clearContent();
      ws.getRange(r,OptionC).clearContent();
      ws.getRange(r,OptionD).clearContent();
      ws.getRange(r,OptionE).clearContent();

      var filterOptions = manAutoOption.filter(function(o){ return o[0] === val });
      var listToApply = filterOptions.map(function (o) { return o[1] });
      var cell = ws.getRange(r,ManualAutomatic);
      applyValidationtoCell(listToApply,cell);
      var firstLevelColValue = ws.getRange(r, Category).getValue();
      var filterOptions = manAutoOption.filter(function(o){ return o[0] === firstLevelColValue});
      var listToApplyA = filterOptions.map(function (o) { return o[2] });
      var cell = ws.getRange(r,OptionA);
      applyValidationtoCell(listToApplyA,cell);
      var listToApplyB = filterOptions.map(function (o) { return o[3] });
      var cell = ws.getRange(r,OptionB);
      applyValidationtoCell(listToApplyB,cell);
      var listToApplyC = filterOptions.map(function (o) { return o[4] });
      var cell = ws.getRange(r,OptionC);
      applyValidationtoCell(listToApplyC,cell);
      var listToApplyD = filterOptions.map(function (o) { return o[5] });
      var cell = ws.getRange(r,OptionD);
      applyValidationtoCell(listToApplyD,cell);
      var listToApplyE = filterOptions.map(function (o) { return o[6] });
      var cell = ws.getRange(r,OptionE);
      applyValidationtoCell(listToApplyE,cell);

最佳答案

所以我找到了答案。良好的 sleep 和清醒的头脑会让一切变得不同。 对于任何偶然发现此问题并寻找类似问题答案的人...... 该变量没有提取正确的数据。或者更具体地说,它没有提取正确数量的列。

var manAutoOption = wsData.getRange(2, 1,wsData.getLastRow()-1,3).getValues();

"wsData.getLastRow()-1,3)"最后一个数字是提取的列数。将该数字更改为您需要引用的列数,其他一切都很好。

关于javascript - 第一个依赖数据验证下拉列表工作正常,随后返回 "Undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59707142/

相关文章:

javascript - 在 cakephp 中重新渲染元素 View 后,如何重新绑定(bind) javascript 事件

javascript - 如何只计算有效的 jquery 文件上传?

javascript - 使用 polymer 铁选择器事件

javascript - 在 IE8 中创建对象时出错

javascript - 如何在Javascript中模拟鼠标点击

javascript - 小书签:单击来自主机域的随机指定链接

javascript - 如何解决此错误 "SyntaxError: Unexpected token < in JSON at position 0"

javascript - 检查字符串是否包含特定子字符串

javascript - 下拉菜单对 Safari 没有影响

javascript - Node.js 中的 Google map 几何库