首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google工作表依赖下拉列表

Google工作表依赖下拉列表
EN

Stack Overflow用户
提问于 2017-03-14 22:02:12
回答 1查看 2.6K关注 0票数 0

我正在重新创建和扩展我以前做过的一个文档。我已经把我最初使用的脚本带来了,并在我认为适合在这张纸上工作的地方对它进行了修改,但我肯定遗漏了什么。所涉及的3个电子表格文件的可编辑示例可以找到这里。这些文件是一个示例“价格表”、“目录”(它从所有价格表中聚合制造商名称,并有一个"Catalog“选项卡用于我的主要供应商未出售的misc项目)和”增编B“,这是我需要帮助的文件。

本文件是我的合同的增编,其中列出了作为该合同一部分出售的所有设备。它有两个活页(“增编B”和"XREF"),“增编B”有几个相关栏:供应商、制造商、型号、描述和价格。它们的依赖关系如下:

目前正在工作

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

不工作,脚本在文件中

  • 制造商:根据选定的供应商,应该是从"XREF“中以供应商名称为标题的列中生成的下拉列表。

如果这件事比我以前做的更棘手的话。

  • 模型:我希望这个专栏是一个下拉列表,列出与该制造商相关的所有型号,从我的供应商提供给我的一个完全独立的价目表中列出。(我分享了一份价格表样本,其中反映了所有这类档案中的列位。
  • 描述:从供应商列中选择的价格表中显示所选模型的相应说明。
  • 价格:从供应商列中选择的价目表中显示所选模型的相应标记价格。

这点总结了我的目标和我所奋斗的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-14 23:59:10

因此,我在中查看了您的脚本文件。我做了很少的编辑,现在应该可以工作了,修改后的代码:

代码语言:javascript
复制
    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)基本上,您处理问题的方式与处理上面的代码相同!选择制造商后,脚本将在工作表中查找该制造商,并在相应的模型列中更新数据验证。您将修改代码如下

代码语言:javascript
复制
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)更好的方法是使用Sidebar/Dialog Box验证输入,然后将其添加到最后的工作表中。(看起来更干净,也可以防止不必要的编辑触发器在工作表中,这可能需要一段时间来更新。)您可以在这里找到更多详细信息:https://developers.google.com/apps-script/guides/dialogs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42797403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档