天天看點

java 導出多個excel_【轉】java導出多個excel表格,并壓縮成zip輸出

@RequestMapping("exportApplyBatchExcel")public voidexportApplyBatchExcel(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 applyBatchMXVos =JsonUtil.readJsonList(JsonUtil.toString(result),

ApplyBatchMXVo.class);//導出

try{//設定導出excel檔案

out =response.getOutputStream();

ZipOutputStream zipOutputStream= newZipOutputStream(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> datas = new ArrayList<>();

List 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 data2 = new ArrayList<>();//插入第二行表頭

data2.add("商戶流水号");//商戶流水号

data2.add("收款人email");//收款人email

data2.add("收款人姓名");//收款人姓名

data2.add("付款金額(元)");//付款金額(元)

data2.add("付款理由");//付款理由

datas.add(data2);for(ApplyMoneyMXVo amvo : vo.getApplyMoneyMXVos()) {

List 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;

}

}