POI使用cell.getCellStyle()设置指定单元格颜色,但是其它没有指定的单元格也会变色

描述

HSSFCell cell = row.createCell((short)i);
  cell.getCellStyle().setAlignment(HSSFCellStyle.ALIGN_RIGHT);

你可能发现创建后的excel文件所有的列都变成右对齐了…
  
   翻了翻代码,还挺复杂,大意就是在创建的xls的时候会产生若干默认的ExtendedFormatRecord,这样在调用 row.createCell((short)i)创建普通的cell的时候,如果POI没有办法根据cell信息(i)找到对应的 ExtendedFormatRecord,则会返回固定的一个(at 0xF),这样在每次getCellStyle的时候返回的都是同一个style的reference. 所以对它的修改会影响整个xls文档.
  (上面说的不严谨,仅供参考)

解决方法:

新建一个cellStyle,然后将原来的Style复制到新的style中,然后在这个新的style上进行操作。

//所以如果你需要修改某个cell的样式,如下
HSSFCell cell = row.createCell((short)i);  
HSSFCellStyle cStyle = wb.createCellStyle();  
//不直接使用getCellStyle(),用cloneStyleFrom就能实现保持原有样式
cStyle .cloneStyleFrom(cell.getCellStyle());               
cStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);  
cell.setCellStyle(cStyle);  

来源:解决方法来源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值