最近做项目有个需求要求把查询得到的数据在经过一定的要求排序之后再页面上展示出来,同时要能按照排序之后的样子导出生成Excel文件。
在这里介绍一种简单的方式,jsp->excel,这种的方式的好处就是不需要任何的第三方jar支持,同时导出的数据就是你所看到的排序。
这种方法的原理是通过改变jsp的头文件类型来实现的。
实现这种方法,首先我们需要一个jsp页面来作为导出的Excel模板。改变其头文件类型
<%@ page contentType="application/msexcel" %> <% out.clearBuffer(); response.setHeader("Content-Type","application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition","attachment;filename=novelStatistics.xls"); %> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="bean.novel.TbNovelStatistics,java.lang.Object,java.util.Map.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <base href="<%=basePath%>"/> <title>统计结果导出Excel</title> <meta http-equiv="pragma" content="no-cache"/> <meta http-equiv="cache-control" content="no-cache"/> <meta http-equiv="expires" content="0"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"/>
其中如果导出的Excel文件出现乱码,则需要在head元素里面加入<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">语句
页面剩余部分就和正常展示结果页面一致,也就是说把结果遍历出来。
后台代码和正常取值一致,无需作别的修改,
在点击导出Excel事件的时候,请求你需要展示的页面的服务,最后展现的效果如果所示:
图一:
图二:
图一为后台请求查询出来的结果,图二为导出的Excel效果图。可以发现,基本上和页面展示的效果是一致的。