将jsp中table里的数据导出到excel中

时间:2022-12-24 09:19:15
用到的是struts2,在jsp页面已经使用list把数据库的数据展示到jsp页面上,现在想在jsp页面上加个链接吧数据以excel的格式下载下来

13 个解决方案

#1


function method1(tableid) {

    var curTbl = document.getElementById(tableid);
    var oXL = new ActiveXObject("Excel.Application");
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    var sel = document.body.createTextRange();
    sel.moveToElementText(curTbl);
    sel.select();
    sel.execCommand("Copy");
    oSheet.Paste();
    oXL.Visible = true;

}


<table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0">

#2


用js做的,只能在静态页面上吧,我用在jsp上的,试过,点击没反应

#3


引用 2 楼 ahleilei 的回复:
用js做的,只能在静态页面上吧,我用在jsp上的,试过,点击没反应


静态和jsp都没事,只要是table就行啊,tableid对应了吗。

#4


对上了,没什么反应,我table里的数据是list迭代进去的

#5


我这里有个以前做的例子,不是用js做的,希望对你有所帮助

一下是你要存成excel文件的jsp文件,其中table里的数据list是你从struts后台传来的list,你可以试试

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="application/vnd.ms-excel; charset=gbk" %>
<%@page import="java.text.SimpleDateFormat"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddkkmmssSSS");
String filename = new String(("文件名字-"+sf.format(new Date())).getBytes("gbk"),"ISO-8859-1");      
response.addHeader("Content-Disposition", "filename=" + filename + ".xls"); 
%>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>
<%@ page isELIgnored="false"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>XX信息</title>
<link href="<%=basePath%>pages/packageInfo/css/table.css" rel="stylesheet" type="text/css" />
    
  </head>
  
  <body>
<div class="boderBG">
<table id="hacker" width="98%" border="0" cellspacing="1" cellpadding="0" class="dataTable">
  <thead><tr>
    <th width="11%" height="23" align="center">XX</th>
    <th width="11%" align="center">XX</th>
    <th width="10%" align="center">XX</th>
    <th width="11%" align="center">XX</th>
     <th width="11%" align="center">XX</th>
    <th width="11%" align="center">XX</th>
    <th width="11%" align="center">XX></th>
    <th width="11%" align="center"></th>
    <th width="11%" align="center">XX</th>
  </tr>
  </thead>
  <c:forEach var="calRecordList" items="${calRecordList}"  >
  <tr>
    <td height="23" >${calRecordList.callnum}</td>
    <td >${calRecordList.toCallnum}</td>
    <td><fmt:formatDate value="${calRecordList.begintime}" pattern="yyyy年MM月dd HH:mm:ss" /></td>
    <td align="center"><fmt:formatDate value="${calRecordList.endtime}" pattern="yyyy年MM月dd HH:mm:ss" /></td>
    <td align="center">${calRecordList.calltype}</td>    
    <td align="center">${calRecordList.talktime}</td>
    <td align="center">${calRecordList.billtime}</td>
    <td align="center">${calRecordList.fee}</td>
    <td align="center">${calRecordList.groupid}</td>
  </tr>
  </c:forEach>
</table>
</div>
</body>
</html>

#6


谢谢,这个虽然能导出excel,但是转到这个页面还没看到table中数据就直接要求打开下载了,我的意思是,在链接到一个jsp页面看到表格数据,然后点击表格下面的一个链接或者按钮在弹出下载保存页面

#7


lz啊,你怎么在jsp页面里得到的数据,你就不会把这些数据在你点击某连接或按钮时传到excel页面,我的意思是在你的显示数据的jsp页面里加个按钮,当点击时再到服务器去取这些数据,然后返回到此excel页面不就可以了

#8


new ActiveXObject("Excel.Application");
你的js脚本是不是报错Automation服务器不能创建对象
是因为您的机器禁止了所有的 ActiveX, 一般将 IE 的安全模式设为“中”即可。

#9


1楼的方法我测试了,不过需要更改浏览器的安全设置,还有如果我的数据是123-123-2,像这样的数据到excel里就会出现错数据,你知道1楼是如何解决的,我感觉js写的虽然效会高,但是如果老让别人更改浏览器的设置,这样我们做的东西是不好的

#10


"你知道1楼是如何解决的"这句话写错了,是想知道1楼是如何解决的

#11


我一般都是有个查询页面,然后点个查询按钮,从数据库查询数据,放到展示页面;
在展示页面,通过隐藏域,保存查询条件,给个导出按钮,根据查询条件,从数据库查询数据,使用jxl或者poi,生成excel文件

#12


有事例吗,贴个给我,用jxl做的,谢谢了

#13


1楼的可以,不管动态还是静态都可行,不过会受到浏览器的安全级别限制

#1


function method1(tableid) {

    var curTbl = document.getElementById(tableid);
    var oXL = new ActiveXObject("Excel.Application");
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    var sel = document.body.createTextRange();
    sel.moveToElementText(curTbl);
    sel.select();
    sel.execCommand("Copy");
    oSheet.Paste();
    oXL.Visible = true;

}


<table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0">

#2


用js做的,只能在静态页面上吧,我用在jsp上的,试过,点击没反应

#3


引用 2 楼 ahleilei 的回复:
用js做的,只能在静态页面上吧,我用在jsp上的,试过,点击没反应


静态和jsp都没事,只要是table就行啊,tableid对应了吗。

#4


对上了,没什么反应,我table里的数据是list迭代进去的

#5


我这里有个以前做的例子,不是用js做的,希望对你有所帮助

一下是你要存成excel文件的jsp文件,其中table里的数据list是你从struts后台传来的list,你可以试试

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="application/vnd.ms-excel; charset=gbk" %>
<%@page import="java.text.SimpleDateFormat"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddkkmmssSSS");
String filename = new String(("文件名字-"+sf.format(new Date())).getBytes("gbk"),"ISO-8859-1");      
response.addHeader("Content-Disposition", "filename=" + filename + ".xls"); 
%>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>
<%@ page isELIgnored="false"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>XX信息</title>
<link href="<%=basePath%>pages/packageInfo/css/table.css" rel="stylesheet" type="text/css" />
    
  </head>
  
  <body>
<div class="boderBG">
<table id="hacker" width="98%" border="0" cellspacing="1" cellpadding="0" class="dataTable">
  <thead><tr>
    <th width="11%" height="23" align="center">XX</th>
    <th width="11%" align="center">XX</th>
    <th width="10%" align="center">XX</th>
    <th width="11%" align="center">XX</th>
     <th width="11%" align="center">XX</th>
    <th width="11%" align="center">XX</th>
    <th width="11%" align="center">XX></th>
    <th width="11%" align="center"></th>
    <th width="11%" align="center">XX</th>
  </tr>
  </thead>
  <c:forEach var="calRecordList" items="${calRecordList}"  >
  <tr>
    <td height="23" >${calRecordList.callnum}</td>
    <td >${calRecordList.toCallnum}</td>
    <td><fmt:formatDate value="${calRecordList.begintime}" pattern="yyyy年MM月dd HH:mm:ss" /></td>
    <td align="center"><fmt:formatDate value="${calRecordList.endtime}" pattern="yyyy年MM月dd HH:mm:ss" /></td>
    <td align="center">${calRecordList.calltype}</td>    
    <td align="center">${calRecordList.talktime}</td>
    <td align="center">${calRecordList.billtime}</td>
    <td align="center">${calRecordList.fee}</td>
    <td align="center">${calRecordList.groupid}</td>
  </tr>
  </c:forEach>
</table>
</div>
</body>
</html>

#6


谢谢,这个虽然能导出excel,但是转到这个页面还没看到table中数据就直接要求打开下载了,我的意思是,在链接到一个jsp页面看到表格数据,然后点击表格下面的一个链接或者按钮在弹出下载保存页面

#7


lz啊,你怎么在jsp页面里得到的数据,你就不会把这些数据在你点击某连接或按钮时传到excel页面,我的意思是在你的显示数据的jsp页面里加个按钮,当点击时再到服务器去取这些数据,然后返回到此excel页面不就可以了

#8


new ActiveXObject("Excel.Application");
你的js脚本是不是报错Automation服务器不能创建对象
是因为您的机器禁止了所有的 ActiveX, 一般将 IE 的安全模式设为“中”即可。

#9


1楼的方法我测试了,不过需要更改浏览器的安全设置,还有如果我的数据是123-123-2,像这样的数据到excel里就会出现错数据,你知道1楼是如何解决的,我感觉js写的虽然效会高,但是如果老让别人更改浏览器的设置,这样我们做的东西是不好的

#10


"你知道1楼是如何解决的"这句话写错了,是想知道1楼是如何解决的

#11


我一般都是有个查询页面,然后点个查询按钮,从数据库查询数据,放到展示页面;
在展示页面,通过隐藏域,保存查询条件,给个导出按钮,根据查询条件,从数据库查询数据,使用jxl或者poi,生成excel文件

#12


有事例吗,贴个给我,用jxl做的,谢谢了

#13


1楼的可以,不管动态还是静态都可行,不过会受到浏览器的安全级别限制