POI导出excel性能解决

Author Avatar
Serical 4月 05, 2017
  • 在其它设备中阅读本文章
public static void transformer(String[] titleList, String[] fieldList,
            String destFileName, int sheetNum, List<? extends Object> beanList)
            throws Exception {
        SXSSFWorkbook wb = new SXSSFWorkbook(100);
        int count = beanList.size() / sheetNum;
        int more = beanList.size() % sheetNum;

        for (int i = 0; i <= count; i++) {
            Sheet sheet = wb.createSheet("第" + (i + 1) + "页");
            // 表头
            Row title = sheet.createRow(0);
            for (int k = 0; k < titleList.length; k++) {
                Cell cell = title.createCell(k);
                cell.setCellValue(titleList[k]);
                sheet.setColumnWidth(k,
                        titleList[k].getBytes().length * 2 * 256);
            }

            if (i == count) {
                sheetNum = more;
            }
            for (int j = 0; j < sheetNum; j++) {
                Row row = sheet.createRow(j + 1);
                for (int k = 0; k < fieldList.length; k++) {
                    Cell cell = row.createCell(k);
                    cell.setCellValue(BeanUtils.getProperty(
                            beanList.get(i * sheetNum + j), fieldList[k]));
                }
            }
        }

        OutputStream os = new FileOutputStream(destFileName);
        wb.write(os);
        os.close();
    }

参考

大数据导出POI之SXSSFWorkbook

POI3.8解决导出大数据量excel文件时内存溢出的问题

POI 实现合并单元格以及列自适应宽度