我正在尝试使用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中以及如何实现?
答案 0 :(得分:2)
Excel
提供基于公式的条件格式规则。
如果=AND(ISNUMBER($C1), $C1>5)
中的值为数字且大于5,则公式True
会返回$C1
。如果此公式应用于范围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);
workbook.write(new FileOutputStream("ConditionalFormatting.xlsx"));
workbook.close();
}
}
现在,如果您在列C
中添加了数字且大于5的内容,则列G:L
中的单元格将填充为黄色。