过滤范围内的数据以填充下拉菜单

时间:2017-03-18 00:52:58

标签: drop-down-menu google-apps-script filter google-sheets

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

到目前为止,这是我的代码:

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())
}

我已经注释了我用完编码知识的地方,我自己实现了这一点。上面的代码基于我对col E的现有数据验证。可以找到样本表here

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

0 个答案:

没有答案