JAVA POI导出内存不足解决方法

使用SXSSFWorkbook对象  在入参里设置多少条数据会写回硬盘。减少内存的占用!

public Object createInferCard(HttpServletRequest request,HttpServletResponse response,String staffName,String index,String yq,String page,String rows,String strTime,String endTime,String keyword,String state) throws Exception{
        Object[ ] params =new Object[]{ };
        PageObject pg = outpatiantLogService.findOutPatinantExcel(params,index,1,20,strTime,endTime,keyword,yq,state);
        List list = (List) pg.getRows();
    // 创建HSSFWorkbook对象(excel的文档对象)
        SXSSFWorkbook  wb = new SXSSFWorkbook(3000);
        CellStyle style=wb.createCellStyle();
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        // 建立新的sheet对象(excel的表单)
        Sheet sheet = wb.createSheet("统计报告");
        // 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
        Row row = sheet.createRow(0);
        if(list==null||list.size()<=0){
            return null;
        }
        Map map = (Map)list.get(0);
        Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
        List<Object> listHead = new ArrayList<Object>();
         while (it.hasNext()) {
             Map.Entry<Integer, String> entry = it.next();
            listHead.add(entry.getKey());
        }
         for (int i = 0; i < listHead.size(); i++) {
             row.createCell(i).setCellValue((String)listHead.get(i));
         }
        
        for (int i = 0; i < list.size(); i++) {
            Row rowAll = sheet.createRow(i+1);
            Map mapAll = (Map)list.get(i);
            Iterator<Map.Entry<Integer, String>> itAll = mapAll.entrySet().iterator();
            List<Object> listAll = new ArrayList<Object>();
            while (itAll.hasNext()) {
                Map.Entry<Integer, String> entry = itAll.next();
                listAll.add(entry.getValue());
            }
            for (int j = 0; j < map.size(); j++) {
                rowAll.createCell(j).setCellValue((listAll.get(j))!=null?listAll.get(j).toString():"");
            }
        }

        // 输出Excel文件
        OutputStream output = response.getOutputStream();
        response.reset();
       
            response.setHeader("Content-disposition", "attachment; filename="+ToStringUTF8.toUtf8String("data"+GetDate.getDateDay2()+".xls"));
        
        response.setContentType("application/msexcel");
        wb.write(output);
        output.close();
        return null;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值