基于脚本的依赖性下拉列表不工作(表)。

问题描述 投票:0回答:1

我设置了这个脚本,根据在单元格S4上选择的值,在单元格Y4上给我一个下拉列表。这两个值来自的数据是基于另一个名为DW的工作表,从第2行开始,因为它有标题。

function onEdit(){
  var tabLists = "DW";
  var tabValidation = "EditItem";
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);
  var activeCell = ss.getActiveCell();

  if(activeCell.getColumn() == 19 && activeCell.getRow() == 4 && ss.getSheetName() == tabValidation){

    activeCell.offset(0, 6).clearContent().clearDataValidations();

    var makes = datass.getRange("A2:C").getValues();

    var makeIndex = makes[0].indexOf(activeCell.getValue()); //This gives me row2 to check below, but I need the column data, instead. How to change this one then?

    if(makeIndex != 0){

      var validationRange = datass.getRange("C2:C");
        var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
        activeCell.offset(0, 6).setDataValidation(validationRule);

     }  

  }

}

我从DW("C2:C")得到的列表列在Y4上,但它并没有根据S4上选择的项目名称来 "过滤"。

有什么启示,我缺什么吗?

谢谢您

javascript google-sheets dropdown
1个回答
0
投票

如果我对您的问题理解正确的话,问题就出在您的语句中。if(makeIndex != 0)

请记住,该方法 指数(indexOf) 返回 -1 而不是 0 如果在数组中没有找到一个条目。

所以,你应该查询 if(makeIndex != -1) 如果您想只在以下情况下执行数据验证 activeCell.getValue() 载于 "C2:C".

更新

  • 你想知道列中的哪一行 B 中包含的数值。S4
  • 你想在列中的值 C 这一行的数据将被用于在 Y4

在这种情况下,你需要

  • 换算成列数 B 到一个可搜索的数组中--这可以通过使用 地图()
  • 在列中找到相应的值 C - 这可以通过手动建立A1符号的单元格与检索的索引来完成。

样品。

    var makes = datass.getRange("A2:C").getValues();    
    var searchArray=makes.map(function(e){return e[1];});                            
    var makeIndex = searchArray.indexOf(activeCell.getValue());    
    if(makeIndex != -1){
      var validationRange = datass.getRange("C" + (2+makeIndex));
      var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
      activeCell.offset(0, 6).setDataValidation(validationRule);

    } 

备注。

  • 似乎你没有使用A列,所以没有必要将其包括在范围内。makes
    • Notaions,如 A2:C 的效率不高,因为它们包含了许多空行。相反,最好是使用 最后一行的内容
© www.soinside.com 2019 - 2024. All rights reserved.