1. 程式人生 > 實用技巧 >Apache POI背景色設定覆蓋資料的問題解決辦法

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,相當於每次都新建一個物件,後一個新建的物件都會覆蓋前一個新建的物件,

圖片分析錯因

所以這是很明顯的錯誤,想避免的話,就直接建立好這個例項就好。