Java的HSS API在使用上有許多限制,在這裡紀錄網路上無法快速找到答案的解決方式
Excel輸出格式化呼叫過多解決方式
1.先將舊method的資料重組,把格式化相關的東西抽象
/*Excel輸出格式化*/
public static void write_data_Decimal(int i, long l, HSSFCell cell, HSSFRow row, HSSFWorkbook workbook) {
HSSFCellStyle cellStyle = workbook.createCellStyle();
HSSFDataFormat format = workbook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("###,###,###.0"));
cell = row.createCell((short) i);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(l);
cell.setCellStyle(cellStyle);
}
/*TODO 170525 數字輸出CELL時,資料量過大,呼叫過多解法,此法需另外宣告HSSFCellStyle及HSSFDataFormat*/
public static void write_data_DecimalBigDataGDK(int i, Double s1, HSSFCell cell, HSSFRow row, HSSFWorkbook workbook,HSSFCellStyle cellStyle1,HSSFDataFormat format1) {
cellStyle1.setDataFormat(format1.getFormat("###,###,###.0"));
cell = row.createCell((short) i);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(s1);
cell.setCellStyle(cellStyle1);
}
2.在Excel寫入資料的地方,把格式化方式先宣告出來,避免瘋狂套用(實測於i7上可解決約4萬筆資料格式化)
...
/*FIXME 解法*/
HSSFCellStyle CellStyleGDK = workbook2.createCellStyle();
HSSFDataFormat DataFormatGDK = workbook2.createDataFormat();
for(int i=0;i<40000;i++) {
write_data_DecimalBigDataGDK(j, Double.parseDouble("100,000".replaceAll(",", "")), cell2, row2, workbook2,CellStyleGDK,DataFormatGDK);
j++;
}
...
參考資料
http://www.wxdl.cn/java/4000-styles-xls-workbook.html
https://stackoverflow.com/questions/20143596/error-creating-cell-with-poi
http://blog.csdn.net/hoking_in/article/details/7919530