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);