close

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

arrow
arrow
    全站熱搜

    蓋瑞修特 發表在 痞客邦 留言(0) 人氣()