Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drop down menu 谷歌工作表相关下拉列表_Drop Down Menu_Google Apps Script - Fatal编程技术网

Drop down menu 谷歌工作表相关下拉列表

Drop down menu 谷歌工作表相关下拉列表,drop-down-menu,google-apps-script,Drop Down Menu,Google Apps Script,我正在重新创建和扩展我以前制作的文档。我已经引入了我最初使用的脚本,并在我认为合适的地方对其进行了调整,以使其在本表中正常工作,但我一定错过了一些东西。可以找到涉及的3个电子表格文件的可编辑示例。这些文件是一个样本“价目表”、“目录”(它汇总了所有价目表中的制造商名称,还有一个“目录”选项卡,用于我的一个主要供应商未销售的杂项物品),以及“附录B”,这是我需要帮助的文件 本文件是我合同的附录,其中列出了作为合同一部分出售的所有设备。其中有两张表(“附录B”和“外部参照”),而“附录B”有几个相关

我正在重新创建和扩展我以前制作的文档。我已经引入了我最初使用的脚本,并在我认为合适的地方对其进行了调整,以使其在本表中正常工作,但我一定错过了一些东西。可以找到涉及的3个电子表格文件的可编辑示例。这些文件是一个样本“价目表”、“目录”(它汇总了所有价目表中的制造商名称,还有一个“目录”选项卡,用于我的一个主要供应商未销售的杂项物品),以及“附录B”,这是我需要帮助的文件

本文件是我合同的附录,其中列出了作为合同一部分出售的所有设备。其中有两张表(“附录B”和“外部参照”),而“附录B”有几个相关列:供应商、制造商、型号、说明和价格。它们之间的依赖关系如下:

目前正在工作

  • 供应商:从外部参照提取基本数据验证!A2:A
不工作,脚本在文件中

  • 制造商:基于所选供应商,应为下拉列表 从上以供应商名称为首的列生成的列表 “外部参照”
现在,这里有一个问题,它变得比我以前做的更棘手

  • 型号:我希望此列是一个下拉列表,列出所有型号 与该制造商关联,价格完全不同 供应商提供给我的清单。(我分享了一份价格表样本,该价格表反映了所有此类文件中出现的列位置

  • 说明:从“供应商”列中选择的价目表中显示所选型号的相应说明

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


这概括了我的目标和我正在努力解决的问题。

所以我查看了工作表附录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())
}
3) 更好的方法是使用边栏/对话框验证输入,然后将其添加到工作表的末尾。(看起来更干净,还可以防止工作表中不必要的on edit触发器,这可能需要一段时间才能更新。)
您可以在此处找到更多详细信息:

最后一点,如果您包含代码并限制自己问多个问题,您将得到更好的回答。包含代码表明您在问题上付出了努力,只问一个/相关的问题可以使问题易于处理。另外,防止问题因为太过复杂而被关闭。这很有趣。我对这两个都不熟悉。您建议使用一个包含三个下拉列表的对话框,然后在“确定”按钮上填充该行?是的,完全正确。当您填写所需的详细信息时,下拉列表将得到更新。因此,我刚刚测试了您的修复程序,但它似乎没有完全起作用。“制造商”下拉列表仅显示前48个结果。至于对话框/边栏,你能给我一个例子,说明我将如何堆叠所有这些代码吗?我查看了你在答案末尾提供的链接,了解了工作中的一般原则,但这超出了我的熟悉范围。是的,我用错了表格来获取最后一行。修改过了,现在应该可以用了。再次感谢您宝贵的帮助。我仍然不确定如何编写第二个查找。在单元格公式中,我会使用“=arrayformula(vlookup(…)”,但我不知道如何将其转换为这种情况。第一个下拉列表是从列中检索定义的列表,但是模型下拉列表需要找到colB的所有值,其中colA=MFR。
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.