POI使用cell.getCellStyle()設置指定單元格顏色,但是其它沒有指定的單元格也會變色


   HSSFCell cell = row.createCell((short)i);
  cell.getCellStyle().setAlignment(HSSFCellStyle.ALIGN_RIGHT);
    ....
    你可能發現創建后的excel文件所有的列都變成右對齊了...
  
   翻了翻代碼,還挺復雜,大意就是在創建的xls的時候會產生若干默認的ExtendedFormatRecord,這樣在調用 row.createCell((short)i)創建普通的cell的時候,如果POI沒有辦法根據cell信息(i)找到對應的 ExtendedFormatRecord,則會返回固定的一個(at 0xF),這樣在每次getCellStyle的時候返回的都是同一個style的reference. 所以對它的修改會影響整個xls文檔.
  (上面說的不嚴謹,僅供參考)

 

解決方法:

   新建一個cellStyle,然后將原來的Style復制到新的style中,然后在這個新的style上進行操作。

 

//所以如果你需要修改某個cell的樣式,如下
HSSFCell cell = row.createCell((short)i);  
HSSFCellStyle cStyle = wb.createCellStyle();  
//不直接使用getCellStyle(),用cloneStyleFrom就能實現保持原有樣式
cStyle .cloneStyleFrom(cell.getCellStyle());               
cStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);  
cell.setCellStyle(cStyle); 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM