轉自: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; } }