在使用数据导出的时候,后台的代码可以自己写根据类或者根据网上开源的工具来生成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()打开一个标签重定向到下载链接获取流数据