所以我在附录 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 个问题,以下是我的 cmets 和想法:
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