这篇博客主要是说明如何通过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中,可以看到条件格式的效果,但是,如果你修改其他的单元格,而没有修改被设置的单元格中的内容,那么被设置的单元格的效果并不能立即作出反应;只有当你修改了被设置的单元格中的内容时,才会按照设置的条件来生效。(关于这个缺点,如果大家有更好的解决办法,希望可以提出来,大家学习交流下。)

本文档详细介绍了如何使用Apache POI库的HSSF组件为Excel单元格设置条件格式。主要涉及HSSFSheet、HSSFConditionalFormattingRule、HSSFPatternFormatting和HSSFSheetConditionalFormatting等类的使用。通过ComparisonOperator比较运算符设定规则,并使用CellRangeAddress定义格式应用范围。当单元格内容符合设定条件时,格式会相应改变。但需要注意的是,修改未被设置的单元格不会即时更新已设置格式的单元格,必须直接修改设置过的单元格内容才能触发条件效果。
1486

被折叠的 条评论
为什么被折叠?



