我正在尝试使用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
但是我想要的是当满足rule1时,然后为另一个单元格区域着色。
poi可能出现这种情况吗?
Excel 提供基于公式的条件格式设置规则。
Excel
如果in的值是数字且大于5 , 则该公式=AND(ISNUMBER($C1), $C1>5)返回。如果将此公式应用于范围,则如果相应行的列中的值满足该条件,则此范围内的每个单元格都为true 。那是因为列在公式中使用固定。但是行号不是固定的,因此是固定的。True``$C1``G1:L1000``C``C``$C
=AND(ISNUMBER($C1), $C1>5)
True``$C1``G1:L1000``C``C``$C
使用示例apache poi:
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(); } }
现在,如果您在C数字列中放置数值大于5的内容,则列中的单元格G:L将填充为黄色。
C
G:L