场景
数据库数据导出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,相当于每次都新建一个对象,后一个新建的对象都会覆盖前一个新建的对象,
图片分析错因
所以这是很明显的错误,想避免的话,就直接创建好这个实例就好。