【轉】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;  
    }  
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM