1. 程式人生 > >頁面資料匯出Excel要點

頁面資料匯出Excel要點

在使用資料匯出的時候,後臺的程式碼可以自己寫根據類或者根據網上開源的工具來生成Excel檔案,需要注意的是,使用getpost的方式都可以來獲取到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()開啟一個標籤重定向到下載連結獲取流資料