POI设置EXCEL单元格的"条件格式"

这篇博客主要是说明如何通过POI设置excle文档中单元格的条件格式。


POI版本 : poi-3.5-FINAL


涉及到的主要类

org.apache.poi.hssf.usermodel.HSSFSheet;

org.apache.poi.hssf.usermodel.HSSFConditionalFormattingRule;

org.apache.poi.hssf.usermodel.HSSFPatternFormatting;

org.apache.poi.hssf.usermodel.HSSFSheetConditionalFormatting;

辅助类

org.apache.poi.hssf.record.CFRuleRecord.ComparisonOperator;


相关代码1

HSSFSheetConditionalFormatting scf = sheet.getSheetConditionalFormatting();

//设置"条件格式"的规则,本例选择的条件类型是:"单元格数据"
//如果当前单元格的数据等于R,则显示红色
HSSFConditionalFormattingRule cf_R_rule = scf.createConditionalFormattingRule(ComparisonOperator.EQUAL, "\"R\"", null);
HSSFPatternFormatting cf_R = cf_R_rule.createPatternFormatting();
cf_R.setFillBackgroundColor(HSSFColor.RED.index);

//如果当前单元格的数据等于G,则显示绿色
HSSFConditionalFormattingRule cf_G_rule = scf.createConditionalFormattingRule(ComparisonOperator.EQUAL, "\"G\"", null);
HSSFPatternFormatting cf_G = cf_G_rule.createPatternFormatting();
cf_G.setFillBackgroundColor(HSSFColor.GREEN.index);

HSSFConditionalFormattingRule[] cfRules = {cf_R_rule, cf_G_rule};

//条件格式应用的单元格范围
CellRangeAddress[] regions = {new CellRangeAddress(5, 5, 7, 9)};

scf.addConditionalFormatting(regions, cfRules);


相关代码2

HSSFSheetConditionalFormatting scf = sheet.getSheetConditionalFormatting();

//设置"条件格式"的规则,本例选择的条件类型是:"公式"
//如果A1到A5单元格中有一个为空,那么对应单元格就显示红色
HSSFConditionalFormattingRule cf_rule= scf.createConditionalFormattingRule("COUNTBLANK(A1:A5)>0");
HSSFPatternFormatting cf = cf_rule.createPatternFormatting();
cf.setFillBackgroundColor(HSSFColor.RED.index);

HSSFConditionalFormattingRule[] cfRules = {cf_rule};

//条件格式应用的单元格范围
CellRangeAddress[] regions = {CellRangeAddress.valueOf("B1:B1")};

scf.addConditionalFormatting(regions, cfRules);


说明: 

1. HSSFSheetConditionalFormatting.createConditionalFormattingRule()

提供了两种方式来生成条件格式:“单元格数据”,可以使用 ComparisonOperator.BETWEEN,NOT_BETWEEN,EQUAL,NOT_EQUAL,GT,LT,GE,LE 多种比较运算符;

                                                            "公式",只需要将公式的以字符串的形式传给该方法,就可以生效(如果公式中有 " , 记得使用转义字符 \"  )

2. CellRangeAddress[] regions = {CellRangeAddress.valueOf("B1:B1")};

CellRangeAddress[] regions = {new CellRangeAddress(5, 5, 7, 9)};

用来指定"条件格式"作用的范围,如上面的代码,可以用两种不同的方式来指定作用域。


缺点:

导出的excle中,可以看到条件格式的效果,但是,如果你修改其他的单元格,而没有修改被设置的单元格中的内容,那么被设置的单元格的效果并不能立即作出反应;只有当你修改了被设置的单元格中的内容时,才会按照设置的条件来生效。(关于这个缺点,如果大家有更好的解决办法,希望可以提出来,大家学习交流下。)



你可能感兴趣的:(Technical,Documents,Java)