Apache POI - 条件格式 - 需要为规则和格式设置不同的单元格范围

nsh*_*eta 1 java excel apache-poi

我正在尝试使用 apache poi java 创建一个空的 excel 模板。我需要添加一个规则 - 当列没有。3 被填充,然后从 7 到 12 的列需要以某种颜色突出显示(作为用户的强制性指标)。

我可以找到下面的代码,当在同一单元格上满足条件时,它会为单元格着色。但是我想在当前单元格上满足条件时为不同的单元格着色/格式化。

`   XSSFSheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
    ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.GT, "5");

    PatternFormatting patternFmt = rule1.createPatternFormatting();
    patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index);

    sheetCF.addConditionalFormatting(addressList.getCellRangeAddresses(), rule1); //when rule1 is met, same cell is colored yellow
Run Code Online (Sandbox Code Playgroud)

但我想要的是当满足规则 1 时,然后为不同的单元格范围着色。

这在 poi 中是可能的吗?

Axe*_*ter 7

Excel 提供基于公式的条件格式规则。

如果 in 中的值是数字且大于 5 , 则该公式=AND(ISNUMBER($C1), $C1>5)返回。如果将此公式应用于 range ,则如果相应行的列中的值满足该条件,则此范围内的每个单元格都将为真。那是因为在公式中使用了列固定。但是行号不是固定的,所以是相对的。True$C1G1:L1000CC$C

使用示例apache poi

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.poi.ss.util.CellRangeAddress;

import java.io.FileOutputStream;

public class ConditionalFormatting {

 public static void main(String[] args) throws Exception {
  Workbook workbook = new XSSFWorkbook();

  Sheet sheet = workbook.createSheet("new sheet");
  SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();

  ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("AND(ISNUMBER($C1), $C1>5)");
  PatternFormatting fill = rule.createPatternFormatting();
  fill.setFillBackgroundColor(IndexedColors.YELLOW.index);
  fill.setFillPattern(PatternFormatting.SOLID_FOREGROUND);

  ConditionalFormattingRule[] cfRules = new ConditionalFormattingRule[]{rule};

  CellRangeAddress[] regions = new CellRangeAddress[]{CellRangeAddress.valueOf("G1:L1000")};

  sheetCF.addConditionalFormatting(regions, cfRules);

  workbook.write(new FileOutputStream("ConditionalFormatting.xlsx"));
  workbook.close();

 }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您在列中放入C数字且大于 5 的内容,则列中的单元格G:L将填充为黄色。