关于 jsp 导出Excel (迅雷下载问题)

polimo 2009-02-25 05:27:39
先简单描述下问题情况:jsp 导出excel 时, 只要不用下载工具直接下载(如下图)一切正常,但当使用下载工具时就

会出现两次下载并每次下载内容为null,在DownExcel.jsp中输出System.out.println(body);当下载提示刚打开时有内容

输出,而点击下载后输出为null。用超连接测试过能正常使用,但当内容比较多时,超连接地址长度有限内容不能完全显示。

代码如下:
excelTest.jsp



<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=GBK">
</head>
<body>
<form id="frm1" action="DownExcel.jsp" target="_blank" style="margin:0;padding:0;" method="POST">
<input type="hidden" name="body" value="" />
</form>
<script type="text/javascript">
function downXLS() {
// 把表格内容用表单 POST 到 DownXLS.jsp
var tab = document.getElementById("tab1");
var frm = document.getElementById("frm1");
frm.body.value = tab.innerHTML;
frm.submit();
}
</script>
<table id="tab1" border="1" cellspacing="1" cellpadding="1">
<tr><td colspan="5" align="center">WEB页面导出为EXCEL文档的方法 </td></tr>
<tr>
<td>列标题1 </td>
<td>列标题2 </td>
<td>列标题3 </td>
<td>列标题4 </td>
<td>列标题5 </td>
</tr>
<tr>
<td>aaa </td>
<td>bbb </td>
<td>ccc </td>
<td>ddd </td>
<td>eee </td>
</tr>
<tr>
<td>AAA </td>
<td>BBB </td>
<td>CCC </td>
<td>DDD </td>
<td>EEE </td>
</tr>
<tr>
<td>FFF </td>
<td>GGG </td>
<td>HHH </td>
<td>III </td>
<td>JJJ </td>
</tr>
</table>
<input type="button" value="down" onclick="javascript: downXLS();" />
</body>
</html>


DownExcel.jsp


<%@ page language="java" pageEncoding="GBK"%>
<%
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment; filename=stat.xls");
request.setCharacterEncoding("GBK");
String body = request.getParameter("body");
//System.out.println(body);
%>
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=GBK">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 11">
<!--[if gte mso 9]><xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Sheet1</x:Name>
<x:WorksheetOptions>
<x:DefaultRowHeight>285</x:DefaultRowHeight>
<x:Selected/>
<x:Panes>
<x:Pane>
<x:Number>3</x:Number>
<x:ActiveRow>2</x:ActiveRow>
<x:ActiveCol>1</x:ActiveCol>
</x:Pane>
</x:Panes>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
<x:WindowHeight>9090</x:WindowHeight>
<x:WindowWidth>11715</x:WindowWidth>
<x:WindowTopX>240</x:WindowTopX>
<x:WindowTopY>90</x:WindowTopY>
<x:ProtectStructure>False</x:ProtectStructure>
<x:ProtectWindows>False</x:ProtectWindows>
</x:ExcelWorkbook>
</xml><![endif]-->
</head>
<body>
<table border="1" cellspacing="1" cellpadding="1">
<% out.print(body); %>
</table>
</body>
</html>


...全文
835 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveyao732251876 2011-10-28
  • 打赏
  • 举报
回复
做下角有一个IE打开
loveyao732251876 2011-10-28
  • 打赏
  • 举报
回复
在迅雷跳出的做下面的窗体有一个以IE打开,然后在保存
xsb7695 2011-08-10
  • 打赏
  • 举报
回复
其实我知道:不要直接写入stream,而是save为服务器的文件,然后redirect过去,下载工具会好的。但我不想在服务器上另存文件出来,因为那样会引出其他副作用——不容易删,搞不好反倒垃圾一堆堆。

所以,我也决定“不管它了”
zhixuanyici 2011-07-19
  • 打赏
  • 举报
回复
我也遇到这个问题,可是就是没法解决,上司最后决定不用管它。真头疼啊
money8899 2009-02-26
  • 打赏
  • 举报
回复
关注。。。
polimo 2009-02-25
  • 打赏
  • 举报
回复

不知道有没有好些的办法解决这个问题啊。
mysky191_chi 2009-02-25
  • 打赏
  • 举报
回复
mark,我也遇到问题了,只要是下载工具就不行,关注。。。
polimo 2009-02-25
  • 打赏
  • 举报
回复

不好意思图片无法上传。

就是普通的有 打开、保存、取消 3个按纽的那种普通下载.

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧