gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:15:11 26 4
gpt4 key购买 nike

“选项”都应根据“类别”输入创建一个数据验证下拉列表。 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com