zoukankan      html  css  js  c++  java
  • 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); 
  • 相关阅读:
    JavaEE基础(十九)/异常和File
    JavaEE基础(十八)/集合
    JavaEE基础(十七)/集合
    JavaEE基础(十六)/集合
    快排、插入、冒泡排序
    函数技巧总结
    读书笔记-你不知道的JS中-函数生成器
    读书笔记-你不知道的JS中-promise(3)
    异步API
    读书笔记-你不知道的JS中-promise(2)
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/4791711.html
Copyright © 2011-2022 走看看