带有多个条件格式规则的Excel脚本

b5lpy0ml  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(106)

我有一个共享的电子表格,可以在Sharepoint / Teams / OneDrive中访问。我使用了很多条件格式。问题是,当很多用户在同一个工作表中工作时,条件格式很容易被覆盖和破坏,所以我正在编写一个Office脚本来“重新应用”可能会破坏的规则。我不知道如何在脚本中包含多个规则。
当我在桌面应用程序中打开电子表格时,规则目前非常简单,正如你在下面看到的。每个规则查找一个特定的值,并在同一范围内添加一点颜色编码。所有规则都适用于同一范围。

在office脚本代码编辑器中,我有一个工作脚本,它为任何单元格值为“LA”的单元格创建一个规则,但我还有7个值要评估。
为了澄清参考文献:

  • 工作表选项卡名称为“考勤”
  • 范围$D$6:$NF$37是一个命名范围,称为“AttendanceData”
function main(workbook: ExcelScript.Workbook) {

  const shAttendance = workbook.getWorksheet("Attendance");
  const rngAttendanceData = shAttendance.getRange("AttendanceData");
  const conditionalFormat = rngAttendanceData.addConditionalFormat(
    ExcelScript.ConditionalFormatType.cellValue
  ).getCellValue();

  let rule: ExcelScript.ConditionalCellValueRule = {
    formula1: "=\"LA\"",
    operator: ExcelScript.ConditionalCellValueOperator.equalTo
  };
  
  conditionalFormat.setRule(rule);
  
  let format = conditionalFormat.getFormat();
  format.getFill().setColor("#AEAAAA");
}

如何在同一个Office脚本中包含其他条件格式规则以解决所有这8个条件?

ftf50wuq

ftf50wuq1#

使用类似的代码片段添加更多条件格式。

function main(workbook: ExcelScript.Workbook) {

    const shAttendance = workbook.getWorksheet("Attendance");
    const rngAttendanceData = shAttendance.getRange("AttendanceData");

    let conditionalFormat = rngAttendanceData.addConditionalFormat(
        ExcelScript.ConditionalFormatType.cellValue
    ).getCellValue();

    let rule: ExcelScript.ConditionalCellValueRule = {
        formula1: "=\"LA\"",
        operator: ExcelScript.ConditionalCellValueOperator.equalTo
    };
    conditionalFormat.setRule(rule);
    let format = conditionalFormat.getFormat();
    format.getFill().setColor("#AEAAAA");

    // Add 2nd conditional format
    conditionalFormat = rngAttendanceData.addConditionalFormat(
        ExcelScript.ConditionalFormatType.cellValue
    ).getCellValue();
    rule = {
        formula1: "=\"PR\"",
        operator: ExcelScript.ConditionalCellValueOperator.equalTo
    };
    conditionalFormat.setRule(rule);
    format = conditionalFormat.getFormat();
    format.getFill().setColor("#9C5700"); // Update as needed

}

使用For循环简化代码,如下所示。

function main(workbook: ExcelScript.Workbook) {
    const shAttendance = workbook.getWorksheet("Attendance");
    const rngAttendanceData = shAttendance.getRange("AttendanceData");
    let condFormat: object[] = [
        ["=\"LA\"", "#AEAAAA"],
        ["=\"PR\"", "#9C5700"]
    ]
    for(let cFormat of condFormat){
        let conditionalFormat = rngAttendanceData.addConditionalFormat(
            ExcelScript.ConditionalFormatType.cellValue).getCellValue();
        let rule: ExcelScript.ConditionalCellValueRule = {
            formula1: cFormat[0],
            operator: ExcelScript.ConditionalCellValueOperator.equalTo
        };
        conditionalFormat.setRule(rule);
        let format = conditionalFormat.getFormat();
        format.getFill().setColor(cFormat[1]);
    }
}

相关问题