我正在尝试将一些旧的 VBA 代码重写为 Office 脚本。 步骤之一是在多个列上设置数据验证。 使用该脚本,我可以循环命名表的所有列。 所以我的想法是使用列名上的开关来设置相关的数据验证。 到目前为止一切都很好 - 但是:在调用 setRule() 时,ForEach 循环中设置的所有定义的规则都没有完成,但所有列之后都有最后定义的规则(此处:来自列名称“Lagerstatus”的规则)。 有谁知道如何解决这个问题? 提前致谢! 最好的问候, 帕斯卡
代码片段:
let sbOrderTable = workbook.getTable("mainOrderTable");
const errorAlertStype = ExcelScript.DataValidationAlertStyle.stop;
sbOrderTable.getColumns().forEach(column => {
let columnName = column.getName();
let errorMessage = "Nur Einträge aus dem PullDown-Menü sind zulässig";
let dataValidation: ExcelScript.DataValidation;
dataValidation = column.getRange().getDataValidation();
dataValidation.clear();
dataValidation.setIgnoreBlanks(true);
dataValidation.setPrompt({ showPrompt: false, title: "", message: "" });
dataValidation.setErrorAlert({ showAlert: true, title: columnName, message: errorMessage, style: errorAlertStype });
switch (columnName) {
case "Lieferant":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF_SYNC!$D$6:$D$1048576" } });
case "Hersteller":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF_SYNC!$B$6:$B$1048576" } }); 1
case "Ersatzteil":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF!$A$6:$A$7" } });
case "Bestell Index":
//errorMessage = "Ungültiger Bestell-Index gemäss Referenz";
dataValidation.setRule({ list: { inCellDropDown: false, source: "=REF_IDX!$A$6:$A$1048576" } });
case "Bestellt von":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF_SYNC!$A$6:$A$1048576" } });
case "Bestellstatus":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF!$B$6:$B$1048576" } });
case "Lagerstatus":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF!$B$6:$B$1048576" } });
}
});
请为每个
break
子句添加 case
。
switch (columnName) {
case "Lieferant":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF_SYNC!$D$6:$D$1048576" } });
break;
case "Hersteller":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF_SYNC!$B$6:$B$1048576" } });
break;
case "Ersatzteil":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF!$A$6:$A$7" } });
break;
case "Bestell Index":
//errorMessage = "Ungültiger Bestell-Index gemäss Referenz";
dataValidation.setRule({ list: { inCellDropDown: false, source: "=REF_IDX!$A$6:$A$1048576" } });
break;
case "Bestellt von":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF_SYNC!$A$6:$A$1048576" } });
break;
case "Bestellstatus":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF!$B$6:$B$1048576" } });
break;
case "Lagerstatus":
dataValidation.setRule({ list: { inCellDropDown: true, source: "=REF!$B$6:$B$1048576" } });
break;
case default:
// if non-macthing above
}
一个简单的 switch/case/break 演示。
const fruit = "banana";
switch (fruit) {
case "apple":
console.log("Apple selected");
case "banana":
console.log("Banana selected");
case "grape":
console.log("Grape selected");
default:
console.log("Unknown fruit");
}
您可能认为输出是
Banana selected
。其实是这样的
Banana selected
Grape selected
Unknown fruit