• 【转】java导出多个excel表格,并压缩成zip输出


    转自:http://blog.csdn.net/qq_14861089/article/details/53169414    感谢作者分享

    /** 
     * 导出支付宝批量支付文件excel 
     *  
     * @param name 
     * @param begintime 
     * @param endtime 
     * @param p 
     * @param l 
     * @param k 
     * @param request 
     * @param response 
     */  
    @RequestMapping("exportApplyBatchExcel")  
    public void exportApplyBatchExcel(String name, String begintime, String endtime, Integer p, Integer l, String k,  
            HttpServletRequest request, HttpServletResponse response) {  
        // if (auth.getCurrentUserId(k) == null) {  
        // ResponseUtil.json(JsonUtil.toString(GenericResponses.TOKEN_LOSE),  
        // response);  
        // return;  
        // }  
        // 逐页查询数据,将所有数据导出到excel表中(注:此方法中不传p,l参数,使用的是service层中,默认的第1页开始,每页显示50条)  
        Integer pp = 1;  
        Long tt = 1l;  
        String[] headers = { "批次号", "付款日期", "付款人email", "账户名称", "总金额(元)", "总笔数" };  
        OutputStream out = null;  
        while (true) {  
            pp++;  
            // 查询数据库  
            ListResponse<?> listResponse = this.finApi.selectApplyBatch(name, begintime, endtime, p, l, k);  
            // 获取总页数  
            Long total = listResponse.getTotal();  
            if (tt > 0) {  
                tt = total - pp;  
            } else {  
                break;  
            }  
            // 获取查询结果,数据列表  
            Object result = listResponse.getResult();  
            // 类型转换  
            if (result != null) {  
                List<ApplyBatchMXVo> applyBatchMXVos = JsonUtil.readJsonList(JsonUtil.toString(result),  
                        ApplyBatchMXVo.class);  
                // 导出  
                try {  
                    // 设置导出excel文件  
                    out = response.getOutputStream();  
                    ZipOutputStream zipOutputStream = new ZipOutputStream(out);  
                    String fileName = "批量支付文件" + ".zip";  
                    response.setContentType("application/octet-stream ");  
                    response.setHeader("Connection", "close"); // 表示不能用浏览器直接打开  
                    response.setHeader("Accept-Ranges", "bytes");// 告诉客户端允许断点续传多线程连接下载  
                    response.setHeader("Content-Disposition",  
                            "attachment;filename=" + new String(fileName.getBytes("GB2312"), "ISO8859-1"));  
                    response.setCharacterEncoding("UTF-8");  
                    // 遍历填充数据  
                    for (ApplyBatchMXVo vo : applyBatchMXVos) {  
                        List<List<Object>> datas = new ArrayList<>();  
                        List<Object> data = new ArrayList<>();  
                        data.add(vo.getId());// 批次号  
                        data.add(vo.getCreateTime());// 付款时间  
                        data.add(vo.getPayAccount());// 付款人email  
                        data.add(vo.getPayName());// 账户名称  
                        data.add(vo.getTotalCost());// 总金额(元)  
                        data.add(vo.getTotalCount());// 总笔数  
                        datas.add(data);  
                        List<Object> data2 = new ArrayList<>();  
                        // 插入第二行表头  
                        data2.add("商户流水号");// 商户流水号  
                        data2.add("收款人email");// 收款人email  
                        data2.add("收款人姓名");// 收款人姓名  
                        data2.add("付款金额(元)");// 付款金额(元)  
                        data2.add("付款理由");// 付款理由  
                        datas.add(data2);  
                        for (ApplyMoneyMXVo amvo : vo.getApplyMoneyMXVos()) {  
                            List<Object> data3 = new ArrayList<>();  
                            data3.add(amvo.getApplyNo());// 商户流水号  
                            data3.add(amvo.getUserAccount());// 收款人email  
                            data3.add(amvo.getUserName());// 收款人姓名  
                            data3.add(amvo.getMoney());// 付款金额(元)  
                            data3.add(amvo.getPayCase());// 付款理由  
                            datas.add(data3);  
                        }  
                        // 导出文件zip压缩设置  
                        Workbook book = GenerateXmlUtil.generateCreateXsl(headers, datas, "批量支付文件");  
                        ZipEntry entry = new ZipEntry(vo.getId() + ".xls");  
                        zipOutputStream.putNextEntry(entry);  
                        book.write(zipOutputStream);  
                    }  
                    // 关闭输出流  
                    zipOutputStream.flush();  
                    zipOutputStream.close();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                    ResponseUtil.text(TraceUtil.trace(e), response);  
                }  
            }  
            // 重新设置分页参数  
            p = pp;  
        }  
    }  
  • 相关阅读:
    设计模式的C语言应用-外观模式-第八章
    00071_基本类型包装类
    win7不能在同一窗口打开文件夹,解决办法
    浏览器主页被搜狗劫持的解决办法,慎用宁美国度的安装软件,慎用不正规来源的软件
    使用inotify-tools与rsync构建实时备份系统
    浅淡 RxJS WebSocket
    SpringMVC大文件(百M以上)的上传下载实现技术
    C#.NET大文件(百M以上)的上传下载实现技术
    JSP大文件(10G以上)的上传下载实现技术
    JAVA大文件(10G以上)的上传下载实现技术
  • 原文地址:https://www.cnblogs.com/laobiao/p/7045674.html
Copyright © 2020-2023  润新知