Google表格 - 相关下拉列表

时间:2017-03-14 22:02:12

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

我正在重建并扩展我之前制作的文档。我已经引入了我原本使用过的脚本,并将其调整到我认为合适的位置,以便在本表中使用它,但我一定错过了一些东西。可以找到所涉及的3个电子表格文件的可编辑样本here。这些文件是样本"价格表","目录"(汇总了所有价目表中的制造商名称,并且还有一个"目录"标签用于misc项目没有由我的一个主要供应商出售)和"附录B"这是我需要帮助的文件。

本文件是我合同的附录,其中列出了作为合同一部分出售的所有设备。它有2张("附录B"" XREF")和#34;附录B"有几个依赖列:供应商,制造商,型号,描述和价格。他们的依赖关系如下:

目前正在工作

  • 供应商:从XREF拉出基本数据验证!A2:A。

无效,文件中的脚本

  • 制造商:根据所选的供应商,应该是一个下拉列表 从该供应商名称开头的列生成的列表 " XREF"

现在,除了我以前做过的事情之外,它变得棘手了。

  • 型号:我希望此列成为列出所有型号的下拉列表 与该制造商相关联,从完全独立的价格 我的供应商提供给我的清单。 (我已经共享了一个样本价格表,它反映了列在所有这些文件中的位置。

  • 描述:从供应商列中选择的价格表中显示所选模型的相应描述。

  • 价格:从供应商列中选择的价格表中显示所选模型的相应标记价格。

这就是总结了我的目标以及我所挣扎的目标。

1 个答案:

答案 0 :(得分:0)

所以我在表格附录B中查看了你的脚本文件。 我做了一些编辑,它应该现在正在使用,修改后的代码:

    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 != 6) return;  //You col was set to 5 changed it to 6!
  var val = range.getValue(),
      dv = ss.getSheetByName('XREF'),
      data = dv.getDataRange().getValues(),
      catCol = data[0].indexOf(val),
      list = [];
  Logger.log(catCol)
  for (var i = 1, len = 100; i < len; i++) // Problem is here, you have too many items in list! Cannot have more 500 items for validation
      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)   // Use requireValueIn Range instead to fix the problem
  .build();
  cell.setDataValidation(rule);
  Logger.log(cell.getRow())
}

您的验证无效的原因是您的数据验证列表中有超过500个项目。我只是将其修改为从范围中取相同的值。希望你觉得有帮助!

现在剩下的3个问题,以下是我的评论和想法:

1)我没有找到与您在问题中提到的问题相关的任何代码。所以,我会假设你在询问如何实现这一目标的一般想法?

2)你基本上和上面的代码一样处理问题!选择制造商后,脚本会在工作表中查找该制造商,并在相应的模型列中更新数据验证。 您将修改代码

var ss = SpreadsheetApp.openById("1nbCJOkpIQxnn71sJPj6X4KaahROP5cMg1SI9xIeJdvY")
//The above code with select the catalog sheet.
dv = ss.getSheetByName('Misc_Catalog')
//The above code will open the Misc_Catalog tab. 

3)更好的方法是使用补充工具栏/对话框验证输入,然后将其添加到工作表的末尾。 (看起来更清洁并且还可以防止工作表中不必要的编辑触发器,这可能需要一段时间才能更新。) 您可以在此处找到更多详细信息:https://developers.google.com/apps-script/guides/dialogs