如何使用 office-js 获取由条件格式引起的 Excel 单元格填充颜色

How to get an Excel cell fill color caused by conditional formatting using office-js

我正在使用执行不同类型错误检查的 Excel Javascript API 设置条件格式。例如,如果用户在 A1:A10 范围内输入 "foo" 或 "bar" 以外的任何内容,则条件格式将以红色突出显示该单元格。

我正在尝试编写一个函数,该函数 returns A1:A10 中以红色突出显示的所有单元格的列表 没有 循环数据再次检查值是 "foo" 还是 "bar"。我只想获取条件格式设置为红色的单元格列表。

当我使用 range.getCellProperties() 加载 format/fill/color 属性 时,它 returns 白色 (#FFFFFF) 即使条件格式显示单元格填充作为红色。如何在条件格式评估后获取单元格的填充颜色?

Click here for code 重现了这个问题。 运行 这是在 Script Lab 中的简单位置。同时在下面发布代码:

await Excel.run(async (context) => {
        const sheet = context.workbook.worksheets.getActiveWorksheet();
        // setup
        var rangeWithValues = sheet.getRange("A1:A5");
        rangeWithValues.values = [["foo"], ["bar"], ["foo"], ["bar"], ["foo"]];
        var conditionalFormatRange = sheet.getRange("A1:A10");
        conditionalFormatRange.conditionalFormats.clearAll();
        var conditionalFormat = conditionalFormatRange.conditionalFormats.add(Excel.ConditionalFormatType.custom);
        conditionalFormat.custom.rule.formula = `=NOT(OR(A1="foo",A1="bar"))`;
        conditionalFormat.custom.format.fill.color = "red";
        await context.sync();
        // get cell props
        var rangeProps = conditionalFormatRange.getCellProperties({
          address: true,
          format: {
            fill: {
              color: true
            }
          }
        });
        await context.sync();
        // output vals
        rangeProps.value.forEach(rowProps => {
          rowProps.forEach(cellProp => {
            console.log("address: " + cellProp.address + "; fill color: " + cellProp.format.fill.color);
          })
        })
      }); 

RangeFormat API 可以得到范围格式,但是不能得到 conditionalFormat 因为条件格式没有改变真正的范围格式,你可以尝试改变 [=21 中的背景颜色=] 对于A8,无论你改变什么颜色,它都显示为红色(条件格式颜色)。

因此,这将是一个检测范围显示格式的新请求,所以我建议您可以在 uservoice 中提交您的请求,并在 https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback?category_id=163563 上为此功能点赞。并为此功能点赞。感谢您的支持