Apache POI背景色設定覆蓋資料的問題解決辦法
阿新 • • 發佈:2020-09-22
場景
資料庫資料匯出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,相當於每次都新建一個物件,後一個新建的物件都會覆蓋前一個新建的物件,
圖片分析錯因
所以這是很明顯的錯誤,想避免的話,就直接建立好這個例項就好。