我正在重建并扩展我之前制作的文档。我已经引入了我原本使用过的脚本,并将其调整到我认为合适的位置,以便在本表中使用它,但我一定错过了一些东西。可以找到所涉及的3个电子表格文件的可编辑样本here。这些文件是样本"价格表","目录"(汇总了所有价目表中的制造商名称,并且还有一个"目录"标签用于misc项目没有由我的一个主要供应商出售)和"附录B"这是我需要帮助的文件。
本文件是我合同的附录,其中列出了作为合同一部分出售的所有设备。它有2张("附录B"" XREF")和#34;附录B"有几个依赖列:供应商,制造商,型号,描述和价格。他们的依赖关系如下:
目前正在工作
无效,文件中的脚本
现在,除了我以前做过的事情之外,它变得棘手了。
型号:我希望此列成为列出所有型号的下拉列表 与该制造商相关联,从完全独立的价格 我的供应商提供给我的清单。 (我已经共享了一个样本价格表,它反映了列在所有这些文件中的位置。
描述:从供应商列中选择的价格表中显示所选模型的相应描述。
价格:从供应商列中选择的价格表中显示所选模型的相应标记价格。
这就是总结了我的目标以及我所挣扎的目标。
答案 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