- 您有一个下拉列表 #1(在此示例中,在 中
H5),其中包含不同部门的名称。
- 您有一系列下拉列表 #2(在列中
B,从第 12 行开始),其中包含属于某个部门的项目(有关哪些项目属于哪些部门的信息包含在 sheet 中Content)。
- 当在下拉列表 #1 中选择了不同的选项时,您想要更改在每个下拉列表 #2 中选择的项目。
如果这是正确的,您可以使用以下onEdit触发器(检查内联注释):
function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var column = range.getColumn();
var row = range.getRow();
var dropdown1 = range.getValue();
var options = range.getDataValidation().getCriteriaValues()[0];
var depts = {}; // Object with key-values like: { departmentName: [itemNames] }
var currentProp = "";
if (sheet.getName() === "Main" && column === 8 && row === 5) { // Check that edited cell is dropdown #1
var contentSheet = e.source.getSheetByName("Content");
var content = contentSheet.getRange(1, 1, contentSheet.getLastRow()).getValues().map(function(value) {
return value[0]; // Get departments and items from "Content"
});
// Create properties for each department / items in "Content"
for (var i = 0; i < content.length; i++) {
if(options.indexOf(content[i]) !== -1) {
depts[content[i]] = [];
currentProp = content[i];
} else {
depts[currentProp].push(content[i])
}
}
var firstRow = 12;
var column = 2;
var numRows = sheet.getLastRow() - firstRow + 1;
for (var j = 0; j < numRows; j++) { // Iterate through each dropdown #2
var dropdownRange = sheet.getRange(firstRow + j, column);
var dropdownValues = dropdownRange.getDataValidation().getCriteriaValues()[0];
for (var k = 0; k < dropdownValues.length; k++) { // Find element from dropdown that belongs to selected department
if (depts[dropdown1].indexOf(dropdownValues[k]) !== -1) {
dropdownRange.setValue(dropdownValues[k]); // Change dropdown value
break; // End loop
}
}
}
}
}
笔记:
- 我假设下拉列表已经填充,并且您唯一要做的就是在编辑下拉列表 #1 的值时更改每个下拉列表 #2 中的选定值。