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