通过jsp的方式来导出excel数据案例:

以下是案例代码,代码中的datainfo数据请自行书写

注意问题:在打开导出页面时不能使用重定向方式:

例如

 //重定向方式打开导出页面360下会出现导出空表的情况,应该改为下方代码使用转发的方式来。具体原因见下方说明。

//response.sendRedirect(request.getContextPath() + dir);


request.getRequestDispatcher(dir).forward(pageContext.getRequest(), pageContext.getResponse()); 

问题场景:360浏览器下无法导出excel

问题产生原理:360浏览器为了统计访问数,默认对请求进行了二次提交。
解决方式:将导出excel的代码改为转发方式。
具体修改代码:
           try{   
                //modify:2015-12-17兼容360导出excle;修改前
                //response.sendRedirect(request.getContextPath() + dir);
                //修改后
                request.getRequestDispatcher(dir).forward(pageContext.getRequest(), pageContext.getResponse());
            }catch(Exception e){
                
            }

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"
%><%@page import="java.util.Calendar"
%><%@page import="java.util.List"
%><%@page import="org.apache.commons.beanutils.DynaBean"
%><%@page import="com.szboanda.platform.util.taglib.PowerExportTag"
%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"
%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"
%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"
%><%@ taglib uri="/WEB-INF/tld/szboanda.tld" prefix="nbean"
%><%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html"
%><%@ taglib uri="/WEB-INF/tld/struts-logic.tld" prefix="logic"
%><%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean"
%><%
	String ctx = request.getContextPath();
	if ("/".equals(ctx)) {
		ctx = "";
	}
	request.setAttribute("ctx", ctx);
	String var = request.getParameter(PowerExportTag.DATAINFO_SESSION_FLAG);
	String exportCondition = request.getParameter("EXPORT_CONDITION");
	List<DynaBean> datainfo = (List<DynaBean>) session.getAttribute(var);
	session.removeAttribute(var);
	request.setAttribute("datainfo", datainfo);
	request.setAttribute("selectColumn", exportCondition);
	response.setContentType("application/vnd.ms-excel");
	response.setHeader("Content-Disposition", "attachment;filename=\"" + String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS%1$tL", Calendar.getInstance()) + ".xls\"");
%>
<html>
	<head>
		<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
		<style type="text/css">
			table{
				border-style:solid;
			 	border-collapse: collapse;
			}
			thead tr{
				height: 40px; 
			}
			th{
				background-color: #efebde;
				border-style:solid;
				border-color:#7e7d68;
				text-align: center;
				font-weight: bold;
				white-space:nowrap;
			}
			tbody tr{
				height: 34px;
			}
			td{
				border-style:solid;
				border-color:#c0c0c0;
				text-align: left;
				white-space: pre-line;
			}
		</style>
	</head>
	<body>
		<table border="1">
			<thead>
				<tr>
					<th style="width: 40px;">序号</th>
					<c:if test="${fn:contains(selectColumn,'@XM@')}">
						<th style="width: 100px;">姓名</th>
					</c:if>
					<c:if test="${fn:contains(selectColumn,'@MOBILE@') }">
						<th style="width: 100px;">手机</th>
					</c:if>
					<c:if test="${fn:contains(selectColumn,'@AGE@')}">
						<th style="width: 50px;">年龄</th>
					</c:if>
					<c:if test="${fn:contains(selectColumn,'@BGDH@') }">
						<th style="width: 100px;">办公电话</th>
					</c:if>
					<c:if test="${fn:contains(selectColumn,'@EMAIL@') }">
						<th style="width: 180px;">邮箱</th>
					</c:if>
					<c:if test="${fn:contains(selectColumn,'@XZQH@') }">
						<th style="width: 150px;">行政区划</th>
					</c:if>
					<c:if test="${fn:contains(selectColumn,'@BIRTHDAY@') }">
						<th style="width: 100px;">出生日期</th>
					</c:if>
					<c:if test="${fn:contains(selectColumn,'@ZY@') }">
						<th style="width: 150px;">专业</th>
					</c:if>
					<c:if test="${fn:contains(selectColumn,'@FAX@') }">
						<th style="width: 100px;">传真</th>
					</c:if>
				</tr>
			</thead>
			<tbody>
				<c:forEach items="${datainfo}" var="item" varStatus="stat">
					<tr id="trid${stat.index}"/>
						<th style="text-align: center;">${stat.index + 1}</th>
						<c:if test="${fn:contains(selectColumn,'@XM@') }">
							<td>${item.map.XM}</td>
						</c:if>
						<c:if test="${fn:contains(selectColumn,'@MOBILE@') }">
							<td>${item.map.MOBILE}</td>
						</c:if>
						<!-- 可选列导出 -->
						<c:if test="${fn:contains(selectColumn,'@AGE@') }">
							<td style="text-align: center;">${item.map.AGE}</td>
						</c:if>
						<!-- 可选列导出 -->
						<c:if test="${fn:contains(selectColumn,'@BGDH@') }">
							<td>${item.map.BGDH}</td>
						</c:if>
						<c:if test="${fn:contains(selectColumn,'@EMAIL@') }">
							<td>${item.map.EMAIL}</td>
						</c:if>
						<c:if test="${fn:contains(selectColumn,'@XZQH@') }">
							<td>
								<c:if test="${not empty item.map.SHENG_NAME}">
									${item.map.SHENG_NAME}
								</c:if>
								<c:if test="${not empty  item.map.SHI_NAME}">
									-${item.map.SHI_NAME}
								</c:if> 
								<c:if test="${not empty item.map.QX_NAME}">
									-${item.map.QX_NAME}
								</c:if>
							</td>
						</c:if>
						<c:if test="${fn:contains(selectColumn,'@BIRTHDAY@') }">
							<td style="text-align: center;"><fmt:formatDate value="${item.map.BIRTHDAY}" pattern="yyyy-MM-dd"></fmt:formatDate></td>
						</c:if>
						<c:if test="${fn:contains(selectColumn,'@ZY@') }">
							<td><nbean:cache dmjbh="ZY" codeId="${item.map.ZY}"></nbean:cache></td>
						</c:if>
						<!-- 可选列导出 -->
						<c:if test="${fn:contains(selectColumn,'@FAX@') }">
							<td>${item.map.FAX}</td>
						</c:if>
					</tr>
				</c:forEach>
			</tbody>
		</table>
	</body>
</html>




作者:星辰 时间:2016-06-29 浏览 767评论 0 赞 0砸 0 标签: demo excel
评论
还可以再输入500个字

请您注意

·自觉遵守:爱国、守法、自律、真实、文明的原则
·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·您在NoteShare上发表的作品,NoteShare有权在网站内保留、转载、引用或者删除
·参与本评论即表明您已经阅读并接受上述条款