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
静态和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>
一下是你要存成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 的安全模式设为“中”即可。
你的js脚本是不是报错Automation服务器不能创建对象
是因为您的机器禁止了所有的 ActiveX, 一般将 IE 的安全模式设为“中”即可。
#9
1楼的方法我测试了,不过需要更改浏览器的安全设置,还有如果我的数据是123-123-2,像这样的数据到excel里就会出现错数据,你知道1楼是如何解决的,我感觉js写的虽然效会高,但是如果老让别人更改浏览器的设置,这样我们做的东西是不好的
#10
"你知道1楼是如何解决的"这句话写错了,是想知道1楼是如何解决的
#11
我一般都是有个查询页面,然后点个查询按钮,从数据库查询数据,放到展示页面;
在展示页面,通过隐藏域,保存查询条件,给个导出按钮,根据查询条件,从数据库查询数据,使用jxl或者poi,生成excel文件
在展示页面,通过隐藏域,保存查询条件,给个导出按钮,根据查询条件,从数据库查询数据,使用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
静态和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>
一下是你要存成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 的安全模式设为“中”即可。
你的js脚本是不是报错Automation服务器不能创建对象
是因为您的机器禁止了所有的 ActiveX, 一般将 IE 的安全模式设为“中”即可。
#9
1楼的方法我测试了,不过需要更改浏览器的安全设置,还有如果我的数据是123-123-2,像这样的数据到excel里就会出现错数据,你知道1楼是如何解决的,我感觉js写的虽然效会高,但是如果老让别人更改浏览器的设置,这样我们做的东西是不好的
#10
"你知道1楼是如何解决的"这句话写错了,是想知道1楼是如何解决的
#11
我一般都是有个查询页面,然后点个查询按钮,从数据库查询数据,放到展示页面;
在展示页面,通过隐藏域,保存查询条件,给个导出按钮,根据查询条件,从数据库查询数据,使用jxl或者poi,生成excel文件
在展示页面,通过隐藏域,保存查询条件,给个导出按钮,根据查询条件,从数据库查询数据,使用jxl或者poi,生成excel文件
#12
有事例吗,贴个给我,用jxl做的,谢谢了
#13
1楼的可以,不管动态还是静态都可行,不过会受到浏览器的安全级别限制