页面数据导出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()打开一个标签重定向到下载链接获取流数据

猜你喜欢

转载自blog.csdn.net/xiaoyao2246/article/details/83146559