Apache POI背景色设置覆盖数据的问题解决办法


场景

数据库数据导出EXCEL表格,想要对不同的数据,进行背景色的区分。

问题

颜色总是覆盖掉数据,纠错很多,并不是POI版本问题,也不是没设置颜色样式问题

解决方法

先看之前的代码

  • 错误代码
//淺灰色
class errorTest{
//浅灰色
HSSFCellStyle cellStyle_GREY = wb.createCellStyle();
cellStyle_GREY.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyle_GREY.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
    
    HSSFSheet sheet = wb.createSheet("new sheet");
    HSSFRow row1 = sheet.createRow(0);//第一行
    row1.createCell.setCellValue("测试数据");
    row1.createCell.setCellStyle(cellStyle_GREY); 
}

这样只会显示灰色,但并没有测试数据四个字。很明显是不满足的

  • 正确代码
//淺灰色
class correctTest{
//浅灰色
HSSFCellStyle cellStyle_GREY = wb.createCellStyle();
cellStyle_GREY.setFillPattern(FillPatternType.SOLID_FOREGROUND);	
cellStyle_GREY.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
    
    HSSFSheet sheet = wb.createSheet("new sheet");
    HSSFRow row1 = sheet.createRow(0);//第一行
    HSSFCell cell = row1.createCell(0); //关键代码,单独创建一个实例
    cell.setCellValue("测试数据");
    cell.setCellStyle(cellStyle_GREY); 
}

很细微的一处改动,就是把HSSFCell单独创建出来,就能够出来理想的效果了

  • 简单分析:POI如果没有单独创建,而是每一个ROW元素进行createCell后再设置风格操作,就会被覆盖。

  • 错误原因:每一次操作都createCell,相当于每次都新建一个对象,后一个新建的对象都会覆盖前一个新建的对象,

图片分析错因

image-20200922110349822

image-20200922110738440

所以这是很明显的错误,想避免的话,就直接创建好这个实例就好。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM