Drop down menu 筛选要填充的范围内的数据下拉菜单

Drop down menu 筛选要填充的范围内的数据下拉菜单,drop-down-menu,google-apps-script,filter,google-sheets,Drop Down Menu,Google Apps Script,Filter,Google Sheets,我有一个电子表格,作为合同中列出设备的表格。在给定的行中,选择分销商(第F列)将根据另一张表中的数据使用下拉菜单填充制造商字段(第E列)。我现在需要的是模型字段(col D)填充一个下拉列表,该列表基于我已经为col E中的值定义的一系列范围(l01、l11、l12、l13)的筛选 以下是我目前的代码: function onEdit() { var ss = SpreadsheetApp.getActiveSpreadsheet(), sheet = ss.getActiveShee

我有一个电子表格,作为合同中列出设备的表格。在给定的行中,选择分销商(第F列)将根据另一张表中的数据使用下拉菜单填充制造商字段(第E列)。我现在需要的是模型字段(col D)填充一个下拉列表,该列表基于我已经为col E中的值定义的一系列范围(l01、l11、l12、l13)的筛选

以下是我目前的代码:

function onEdit() 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet(),
  sheet = ss.getActiveSheet(),
  name = sheet.getName();
  if (name != 'Addendum B') return;
  var range = sheet.getActiveRange(),
      col = range.getColumn();
  if (col != 5) return;
  var val = range.getValue(),
      ctlg0 = SpreadsheetApp.openById("1nbCJOkpIQxnn71sJPj6X4KaahROP5cMg1SI9xIeJdvY"),
      ctlg1 = SpreadsheetApp.openById("1Jzue8G0dAJC5CiY5_s-thaOiYEyfeJScb2ITNWa_dVQ"),
      c01 = ctlg0.getSheetByName('MISC_CATALOG'),
      c11 = ctlg1.getSheetByName('Part #A-I'),
      c12 = ctlg1.getSheetByName('Part #J-R'),
      c13 = ctlg1.getSheetByName('Part #S-9'),
      l01 = c01.getRange("A2:B"),
      l11 = c11.getRange("A2:B"),
      l12 = c12.getRange("A2:B"),
      l13 = c13.getRange("A2:B"),
      //data = dv.getDataRange().getValues(),
      //catCol = data[0].indexOf(val),
      //list = [];
  Logger.log(catCol)
  for (var i = 1, len = 100; i < len; i++)
      list.push(data[i][catCol]);
  var listRange = dv.getRange(2,catCol +1,dv.getLastRow() - 1, 1)
  Logger.log(list)
  var cell = sheet.getRange(range.getRow(), col-1)
  var rule = SpreadsheetApp.newDataValidation()
  .requireValueInRange(listRange)  
  .build();
  cell.setDataValidation(rule);
  Logger.log(cell.getRow())
}
函数onEdit()
{
var ss=SpreadsheetApp.getActiveSpreadsheet(),
sheet=ss.getActiveSheet(),
name=sheet.getName();
如果(名称!=“附录B”)返回;
var range=sheet.getActiveRange(),
col=range.getColumn();
如果(col!=5)返回;
var val=range.getValue(),
ctlg0=SpreadsheetApp.openById(“1nbCJOkpIQxnn71sJPj6X4KaahROP5cMg1SI9xIeJdvY”),
ctlg1=SpreadsheetApp.openById(“1Jzue8G0dAJC5CiY5_s-thaOiYEyfeJScb2ITNWa_dVQ”),
c01=ctlg0.getSheetByName('MISC_CATALOG'),
c11=ctlg1.getSheetByName('Part#A-I'),
c12=ctlg1.getSheetByName('Part#J-R'),
c13=ctlg1.getSheetByName('Part#S-9'),
l01=c01.getRange(“A2:B”),
l11=c11.getRange(“A2:B”),
l12=c12.getRange(“A2:B”),
l13=c13.getRange(“A2:B”),
//data=dv.getDataRange().getValues(),
//catCol=数据[0]。索引(val),
//列表=[];
Logger.log(catCol)
对于(变量i=1,len=100;i
我已经注释掉了我自己没有编码知识来实现这一点的地方。以上代码基于我现有的COLE E数据验证。可以找到样本表


我对编码有一个基本的了解,主要通过分解示例代码和阅读GAS在线参考资料自学。对此提供的任何帮助都会很有帮助,但请尽可能详细地解释,以便我有希望了解如何使此解决方案适应未来的项目。

我看不到第5列的任何验证值。我看到范围定义为E2:E10000,但外部参照中没有数据。既然您想要附录B,为什么不直接使用
var sheet=ss.getSheetByName('附录B')
并节省大量额外的编码呢。我从不在声明中使用逗号,所以我想知道,它是否都必须以
结尾?如果是这样的话,那么在
Logger.log(catCol)
之前分号在哪里。我建议您后退几步,做一些简单的电子表格,也许还有更多的教程。不要担心格式问题,只需学习一点编码。请注意代码编辑器语法突出显示声明变量的方式,以及调试器和代码完成的方式。还可以使用getValues和setValues。然后再回来解决这个问题。你可能会发现这更容易理解。@Cooper,谢谢你的回答。很抱歉,我不能完全理解这是对我问题的回答。我问你是否完成了一个特定的目标,并没有帮助你,而是批评了我现有的工作<代码>我看不到第5列的任何验证值。
如我问题中所述,这些值是通过在第6列中选择一个分发服务器来确定的<代码>我看到一个范围被定义为E2:E10000,但在外部参照中没有数据。
我不知道您指的是什么范围(E2:E10000指的是什么表,在哪里引用?
既然您想要附录B,为什么不只是…
我不想检索表中的数据,您引用的代码旨在验证onEdit触发器是否发生在集合中的正确工作表上,以及是否作用于集合中的正确工作表<代码>我从不使用逗号…逗号只是省去了必须以
var
开头的每个声明行。它们将您的条款分开,然后整个声明以
结尾
如果是,那么Logger.log(catCol)前面的分号在哪里?
它正好位于它前面一行的末尾。