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

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

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



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值