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

来源:互联网 发布:acm编程大赛题目 编辑:程序博客网 时间:2024/04/28 12:51
如果你在使用POI创建xls的时候需要处理cell的样式,例如右对齐,那么你可能会像我一样使用如下的方法
  ....
    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文档.
  (上面说的不严谨,仅供参考)

//所以如果你需要修改某个cell的样式,如下  HSSFCell cell = row.createCell((short)i);    HSSFCellStyle cStyle = wb.createCellStyle();        cStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);        cell.setCellStyle(cStyle);    cell.setCellStyle(cStyle);

0 0