立即在列列表中设置数据验证

问题描述 投票:0回答:1

我正在尝试将一些旧的 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" } });
    }
});
excel office-scripts
1个回答
0
投票

请为每个

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
© www.soinside.com 2019 - 2024. All rights reserved.