場景
數據庫數據導出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,相當於每次都新建一個對象,后一個新建的對象都會覆蓋前一個新建的對象,
圖片分析錯因
所以這是很明顯的錯誤,想避免的話,就直接創建好這個實例就好。