我正在尝试使用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
但我想要的是当满足规则 1 时,然后为不同的单元格范围着色。
这在poi中可能吗以及如何?
Excel
提供基于公式的条件格式规则。
公式=AND(ISNUMBER($C1), $C1>5)
返回$C1
中的值是否为数字且大于 5True
。如果将此公式应用于范围G1:L1000
,则如果相应行的第C
列中的值满足该连续性,则此范围中的每个单元格都将为 true。这是因为列C
是使用公式中的$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);
FileOutputStream out = new FileOutputStream("ConditionalFormatting.xlsx");
workbook.write(out);
out.close();
workbook.close();
}
}
现在,如果您在列C
数字和大于 5 的列中放入某些内容,则列G:L
中的单元格将填充为黄色。