最近做項目有個需求要求把查詢得到的數據在經過一定的要求排序之后再頁面上展示出來,同時要能按照排序之后的樣子導出生成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效果圖。可以發現,基本上和頁面展示的效果是一致的。
