頁面資料匯出Excel要點
阿新 • • 發佈:2018-11-10
在使用資料匯出的時候,後臺的程式碼可以自己寫根據類或者根據網上開源的工具來生成Excel檔案,需要注意的是,使用get和post的方式都可以來獲取到Excel檔案
- 使用get方式:
可以將查詢引數用key=value的方式傳到後臺,後臺使用request.getParameter(key)
來取得資料,組裝成Excel檔案後用response.getOutputStream()
取得輸出流以後推出
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream os = null; try { String requestParm = request.getParameter("request"); logger.info("下載Excel收到的資料:" + requestParm);//統一列印請求日誌 JSONObject jo = new JSONObject(); jo = new JSONObject(requestParm); QueryPayRequest req = JSON.parseObject(jo.toString(), QueryPayRequest.class) ; QueryPayResult reply = new QueryPayResult(); req.setPage_num(Integer.MAX_VALUE); req.setCur_page(1); orderServiceHandler.queryPayHandle(req, reply); List<CashierDetailExcelPO> excelDate = new ArrayList<CashierDetailExcelPO>(); if (null != reply.getLst_flow_record()) { for (OrderFlowRecord or : reply.getLst_flow_record()) { CashierDetailExcelPO exce = new CashierDetailExcelPO(or); excelDate.add(exce); } } //拿到資料以後,轉換為Excel,用流的方式輸出 os = response.getOutputStream();// 取得輸出流 response.reset();// 清空輸出流 /* String fileName = "ads.png"; response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1"));// 設定輸出檔案頭 */ //orderServiceHandler.cashierDetailDownloadToExcel(reply, os); //adsServiceHandler.download(url, os); //設定表格頭 LinkedHashMap<String, String> headName = new LinkedHashMap<String, String>(); headName.put("getAgentName", "商戶賬號"); headName.put("getOrderNo", "訂單號"); headName.put("getInnoFlowNo", "收銀流水號"); headName.put("getPayChan", "支付渠道"); headName.put("getCataType", "業務型別"); headName.put("getCardType", "借貸型別"); headName.put("getPayStatus", "支付狀態"); headName.put("getPayMethod", "支付方式"); headName.put("getAmout", "收銀金額"); headName.put("getFee", "代收手續費"); headName.put("getAmouted", "已消費金額"); int i = (int)(Math.random()*900 + 100); SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); String fileName = "收銀明細" + format.format(new Date()) + Integer.toString(i); fileName = String.format("%s.xlsx", fileName); response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1"));// 設定輸出檔案頭 response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定義輸出型別 new ExcelUtil<CashierDetailExcelPO>().exportExcelMultiHeader_2010( null, excelDate, fileName, headName, "Sheet1", CashierDetailExcelPO.class, os); } catch (Exception e) { logger.error("CashierDetailDownloadServlet error:", e); response.setStatus(HttpServletResponse.SC_NOT_FOUND); } finally { if (os != null) { try { os.close(); } catch (IOException e) { logger.error("download os close error:", e); } } } }
- 使用post方式:
直接將查詢from表單提交即可.
**需要注意的是,如果使用了ajax的方式來請求獲得資料,是接受不到檔案的,因為ajax只能接受文字格式,不接受流格式,所以如果要使用ajax的方式來獲得資料,可以利用windosx.open()開啟一個標籤重定向到下載連結獲取流資料