更新:我有一个包含3列的电子表格,我关注的是:
集团(铁/有色金属/等)RI No.(唯一标识符)供应商(选定RI编号的卖方)数据流发生在这样的情况:我选择组(比如说,铁)->在国际扶轮编号。列中,创建一个自动下拉列表,显示铁类别下所有项目的RI编号-->我选择了一个特定的RI编号。从这一下降->所有销售该商品的销售商的下降出现。现在,我编写了一个代码,它可以很好地完成这项工作,但是当我选择一个RI No时,它无法列出供应商列表。里面有"-“字样。例如,来自国际扶轮编号。列表中,如果我选择一个像"6181-1“、”Cu-18毫米“、"CU-25x3”、"25_E.Cont“、”自由度“这样的值,那么供应商下拉列表中的鞋子就没有任何选项可供选择,即使它将显示2个选项。其他值,如"6310-1“,甚至"TTK1 & TTK2”,在RI编号中都不会出现此问题。列表。
剧本:
var ws = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var wsopt = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sorted items");
var opts = wsopt.getRange(2,1,wsopt.getLastRow()-1,13).getValues();
var firstlevelcolumn = 2;
var secondlevelcolumn = 5;
var thirdlevelcolumn= 6;
var wsopt2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("supplier details");
var opts2 = wsopt2.getRange(3,1,wsopt2.getLastRow()-1,12).getValues();
function onEdit(e)
{ var activecell= e.range;
var val = activecell.getDisplayValue();
var r= activecell.getRow();
var c= activecell.getColumn();
var wsName= activecell.getSheet().getName();
if (wsName == "JPS")
{
if (wsName == "JPS" && c == firstlevelcolumn && r > 2)
{ applyFirstLevelValidation(val,r);}
if (wsName == "JPS" && c == secondlevelcolumn && r > 2)
{ applySecondLevelValidation(val,r);}
}//JPS
else if (wsName == "DDNI")
{
if (wsName == "DDNI" && c == firstlevelcolumn && r > 2)
{applyFirstLevelValidation(val,r);}
if (wsName == "DDNI" && c == secondlevelcolumn && r > 2)
{ applySecondLevelValidation(val,r);}
}//DDNI
}//close onEdiT
function applyFirstLevelValidation(val,r)
{
if(val=== "")
{
ws.getRange(r,secondlevelcolumn).clearContent();
ws.getRange(r,secondlevelcolumn).clearDataValidations();
ws.getRange(r,thirdlevelcolumn).clearContent();
ws.getRange(r,thirdlevelcolumn).clearDataValidations();
} else
{
ws.getRange(r,secondlevelcolumn).clearContent();
ws.getRange(r,secondlevelcolumn).clearDataValidations();
ws.getRange(r,thirdlevelcolumn).clearContent();
ws.getRange(r,thirdlevelcolumn).clearDataValidations();
var filteredopts = opts.filter(function(o){return o[0]===val});
var listToApply = filteredopts.map(function(o){return o[1]});
var cell=ws.getRange(r,secondlevelcolumn);
applyValidationToCell(listToApply,cell);
}//close else
}//close applyFirstLevelValidation
function applySecondLevelValidation(val,r)
{
if(val=== "")
{
ws.getRange(r,thirdlevelcolumn).clearContent();
ws.getRange(r,thirdlevelcolumn).clearDataValidations();
} else
{
ws.getRange(r,thirdlevelcolumn).clearContent();
ws.getRange(r,thirdlevelcolumn).clearDataValidations();
var firstlevelcolvalue = ws.getRange(r,firstlevelcolumn).getDisplayValue();
var filteredopts2 = opts2.filter(function(o){return o[6]===firstlevelcolvalue && o[4]===val});
var listToApply2 = filteredopts2.map(function(o){return o[0]});
var cell2=ws.getRange(r,thirdlevelcolumn);
applyValidationToCell(listToApply2,cell2);
}//close else
}
function applyValidationToCell(list,cell)
{
var rule = SpreadsheetApp.newDataValidation().requireValueInList(list).build();
cell.setDataValidation(rule);
} ```发布于 2022-10-10 15:45:30
欢迎!
我检查了代码,但没有发现任何问题。但是,我制作了两个副本进行测试,在其中一个副本中,我删除了“供应商详细信息”中的所有空格:

对此:

这似乎解决了这个问题:

我猜,当行之间有多个空格时,脚本无法正确地读取信息。
更新:
我修改了代码以查看过滤器传递的值:
var filteredopts2 = opts2.filter(function(o){return o[6]===firstlevelcolvalue && o[4]===val});我注意到过滤器正在比较来自JPS选项卡的JPS和supplier details选项卡中的Non- Ferrouse。

在将supplier details中的所有值从以下位置更改之后:

至:

问题解决了。
https://stackoverflow.com/questions/74011386
复制相似问题