`
yeshaoting
  • 浏览: 685812 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用jsp导出到excel汇总[转载]

 
阅读更多

 

http://lifeixian824.blog.163.com/blog/static/2837428520086269342614/

 

设置excel的导出格式
因为ms word和excel的文档都支持html文本格式,因此可以先用word或excel做好模版,另存为Web页,然后将该html改成jsp,将数据部分动态填入即可,不用很辛苦的调整格式

word页面只要在jsp头设置如下指令:
<%@page c %>

excel如下:
<%@page c %>
使用这种方式客户端必须安装有office软件,用户访问时将在ie中直接用word或excel打开该页面。
此方法优势是模板设计、调整方便,无需在服务器端使用复杂的POI或jxl技术,也无需在客户端使用ActiveX控件技术,更安全、方便,轻松实现较好的打印效果。
///////////////////////////////////////////*******************************************************************************************
试试看从网页中把表格直接生成excel,虽然不是直接从sql到excel,不过反而更加方便而且人性化。。
网上倒是找到了不少的资料,发现一段javascript的功能实现代码,很不错:
var elTable = document.getElementById("tb");
var oRangeRef = document.body.createTextRange();
oRangeRef.moveToElementText( elTable );
oRangeRef.execCommand( "Copy" );
var appExcel = new ActiveXObject( "Excel.Application" );
appExcel.Visible = true;
appExcel.Workbooks.Add().Worksheets.Item(1).Paste();
appExcel = null;
实现功能就是把id为tb的表格内的数据都生成为excel,我试试了可行,但是放到服务器来运行就是script error的提示,然后网上到处求问,也找了百度空间的几位高手朋友问了下,可是还是不得其法。。不过还是很感谢他们的热心帮助。没办法,我只能用别的方法来实现了,其实满喜欢上面的这个javascript的功能的,比较人性化。。可惜我黔驴技穷,无法用上它,哎!~既然我帮客户用jsp写的程序,那么我就还是用jsp来实现这个功能吧。。
于是找到了这么一个方法:
原文出自:http://www.jsp.mlc.edu.tw/viewitem.jsp?itemid=0000000065

***************************************************************************************************
一、将网页资料以excel报表以线上浏览方式呈现
xls651.jsp原始码如下

<%@ page c %>
<!-- 以上这行设定本网页为excel格式的网页 -->
<%
response.setHeader("Content-disposition","inline; filename=test1.xls");
//以上这行设定传送到前端浏览器时的档名为test1.xls
//就是靠这一行,让前端浏览器以为接收到一个excel档
%>
<html>
<head>
<title>Excel档案呈现方式</title>
</head>
<body>
<table border="1" width="100%">
<tr>
<td>姓名</td><td>身份证字号</td><td>生日</td>
</tr>
<tr>
<td>李玟</td><td>N111111111</td><td>1900/11/12</td>
</tr>
<tr>
<td>梁静如</td><td>N222222222</td><td>1923/10/1</td>
</tr>
<tr>
<td>张惠妹</td><td>N333333333</td><td>1934/12/18</td>
</tr>
</table>
</body>
</html>
二、将网页资料以excel报表以下载的方式呈现
这个jsp档和上一个差不多,只有差别在这一行:线上浏览的方式: response.setHeader("Content-disposition","inline; filename=test1.xls"); 下载的方式: response.setHeader("Content-disposition","attachment; filename=test2.xls");
附注:
1.以上纯以静态网页的方式呈现excel档,配合资料库,你便能以动态的报表方式做出excel报表了
2.完全不用安装任何元件,或只能受限於win平台,一个简单的方式解决你的报表需求
3.聪明的你,应该能举一反三,知道如何将网页资料以word的doc格式展现了吧!
(是不是只要把contentType改成"application/msword"以及filename的副档名改成.doc就可以!/////////////////////////////////////////////////////////////////////
1. 在Word或Excel中制作报表的样式。
Excel的行高和列宽单位无法用mm或cm表示。
需要计算。在1024*768下,1CM约为38像素。
以此为基准,可计算并控制报表的行列位置。

2. 在Word中设置“表格——标题行重复”。 字串6
在Excel中设置“文件——页面设置——工作表——打印标题”。
3. 另存为网页,改后缀名“htm”为“jsp”。
4. Word报表文件头为: 字串2
<%@page c language="java"%>
Excel报表文件头为:

<% @page c language="java"%>

5. 在文件头部分定义打印参数变量如下(以Excel为例):

<%


//需要打印的记录条数
int PrintRowCount=RowCount; 字串9
//每页打印的记录条数
int PageRowCount=16; 字串1
//最后一页需要打印的空行的数目
int LoopNum=PageRowCount-PrintRowCount%PageRowCount; 字串3
//打印区域的高度,其中2的意思是每页需要重复的标题行的数目
int PrintAreaHeight=(PrintRowCount%PageRowCount==0)?PrintRowCount 2:PrintRowCount LoopNum 2; 字串5
%>
/////////////////////////////////////////////////////////////////////////////////////////////////////////

jsp导出Excel
在开发MIS系统的过程中,客户经常会提出这样的要求:将查询结果导出为Excel文件保存下来。经常是写一次就忘一次,因此决定今天将以前的代码和遇到的问题进行一下总结,下面进入正题。
背景:本例的代码来源于我给学校开发的一个奖学金管理系统,使用者在前台设置一组查询条件之后,点击“导出”按钮即可得到Excel文件了。
目的:得到一个Excel文件,包括姓名、学号、奖项类别、所在院系、年级、学生类别、银行卡号、金额等内容项
文件:export.jsp(前台页面,指定搜索条件)、exporting.jsp(后台页面,export.jsp的action)、ExportExcel.java(javabean文件,负责具体的操作)、Dbase.java(javabean文件,负责数据库操作)
代码:
export.jsp:此代码略去,主要是指定搜索条件
exporting.jsp:
<%@ page c language="java" import="java.sql.*,DBCon.*" errorPage="" %>
<jsp:useBean id="excel" scope="request" class="DBCon.ExportExcel"/>
<jsp:useBean id="dbase" scope="request" class="DBCon.Dbase"/>
<html>
<head>
<meta http-equiv="Content-Type" c>
<title>无标题文档</title>
</head>
<%
String user=(String)session.getAttribute("c_name");//登陆名
String sql="";
String colleage=request.getParameter("colleage");//从export.jsp页面获得
String type=request.getParameter("burseType");//从export.jsp页面获得
String studType=request.getParameter("studType");//从export.jsp页面获得
studType=new String(studType.getBytes("ISO8859_1"),"GBK");
String grade=request.getParameter("studGrade");//从export.jsp页面获得
String title=request.getParameter("title");//从export.jsp页面获得
title=dbase.toChinese(title);
//下面将得到sql语句,与本例业务逻辑相关,无需明白
if(user.equals("ygb"))//研工部用户登陆
sql="select * from master_burse where college like '%"+colleage+"%' and code like '%"+type+"%' and grade like '%"+grade+"%' and type like '%"+studType+"%' and flag1='1'";
else//院系用户登陆
sql="select * from master_burse where college like '%"+colleage+"%' and code like '%"+type+"%' and grade like '%"+grade+"%' and type like '%"+studType+"%'";
response.reset();
response.setContentType("application/vnd.ms-excel");
excel.export(response.getOutputStream(),sql);
//if(excel.export(sql,title,request,application))
//out.println("<a href='"+request.getContextPath()+"/"+GetSysTime.getDay()+".xls' target='blank' >"+"下载"+title+"</a>"+"(右键单击另存为)");
//else{
%>
<!-- <script language="JavaScript" type="text/javascript">
alert("导出失败");
history.go(-1);
</script> -->
<%// } %>
<body>
</body>
</html>

ExportExcel.java:
package DBCon;

import DBCon.*;
import jxl.*;
import jxl.write.*;
import java.sql.*;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ExportExcel {

private Dbase dbase=null;//用于完成各种对数据库的操作
private Vector content=null;//用于存放所要查询的记录
private ResultSet rs=null;

private String name="";//学生姓名
private String studId="";//学号
private String burseType="";//奖项类别
private String grade="";//所在年级
private String studType="";//学生类型
private String colleage="";//所在院系
private String card="";//银行卡号
private int number=0;//奖金金额
private String []title={"姓名","学号","奖项类别","所在院系","年级","学生类别","银行卡号","金额"};
private String targetFile="";

public ExportExcel(){
dbase=new Dbase();
content=new Vector();
}

public boolean export(String sql,String name,HttpServletRequest request,ServletContext context){
targetFile+="/"+GetSysTime.getTime()+".xls";
content=getContent(sql);//以向量的形式存放所有的记录
String path=context.getRealPath(targetFile);
try{
Vector inner=null;
String value="";//存放在cell中的文本值
int num=0;//存放在cell中的数字值

OutputStream os=new FileOutputStream(path);
WritableWorkbook workbook=Workbook.createWorkbook(os);//创建工作薄
WritableSheet worksheet=workbook.createSheet("record",0);//创建第一个工作表,name:工作表名称
Label label=null;//用于写入文本内容到工作表中去
jxl.write.Number nmb=null;//用于写入数值到工作表中去

//开始写入第一行,即标题栏
for(int i=0;i<title.length;i++){
label=new Label(i,0,title);//参数依次代表列数、行数、内容
worksheet.addCell(label);//写入单元格
}
//开始写入内容
for(int i=0;i<content.size();i++){
inner=(Vector)content.get(i);//获取一条记录
for(int j=0;j<inner.size();j++){
//一个一个字段的放入excel中去
if(j==inner.size()-1){//插入的数值
Integer num_=(Integer)inner.get(j);
num=num_.intValue();
nmb=new jxl.write.Number(j,i+1,num);
worksheet.addCell(nmb);
}
else{
value=(String)inner.get(j);
label=new Label(j,i+1,value);
worksheet.addCell(label);
}
}
}
workbook.write();
workbook.close();

}
catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}

public void export(OutputStream os,String sql){
content=getContent(sql);//以向量的形式存放所有的记录

try{
Vector inner=null;
String value="";//存放在cell中的文本值
int num=0;//存放在cell中的数字值

WritableWorkbook workbook=Workbook.createWorkbook(os);//创建工作薄
WritableSheet worksheet=workbook.createSheet("record",0);//创建第一个工作表,name:工作表名称
//WritableSheet worksheet=workbook.createSheet(name,0);//创建第一个工作表,name:工作表名称

Label label=null;//用于写入文本内容到工作表中去
jxl.write.Number nmb=null;//用于写入数值到工作表中去

//开始写入第一行,即标题栏
for(int i=0;i<title.length;i++){
label=new Label(i,0,title);//参数依次代表列数、行数、内容
worksheet.addCell(label);//写入单元格
}
//开始写入内容
for(int i=0;i<content.size();i++){
inner=(Vector)content.get(i);//获取一条记录
for(int j=0;j<inner.size();j++){
//一个一个字段的放入excel中去
if(j==inner.size()-1){//插入的数值
Integer num_=(Integer)inner.get(j);
num=num_.intValue();
nmb=new jxl.write.Number(j,i+1,num);
worksheet.addCell(nmb);
}
else{
value=(String)inner.get(j);
label=new Label(j,i+1,value);
worksheet.addCell(label);
}
}
}
workbook.write();
workbook.close();

}
catch(Exception e){
e.printStackTrace();
//return false;
}
//return true;
}

public Vector getContent(String sql){
rs=dbase.executeQuery(sql);
Vector outter=new Vector();
try{
while(rs.next()){
Vector inner=new Vector();//用于存放一条记录
name=dbase.getName(rs.getString("studId"));//得到学生姓名
studId=rs.getString("studId");//得到学号
burseType=dbase.getBurseName(rs.getString("code"));//得到奖学金类型
colleage=dbase.getCollName(rs.getString("college"));//得到所在院系
grade=rs.getString("grade");
studType=rs.getString("type");
card=dbase.getCard(rs.getString("studId"));//得到银行卡号
number=dbase.getNum(rs.getString("code"));//得到奖学金额度
inner.add(name);
inner.add(studId);
inner.add(burseType);
inner.add(colleage);
inner.add(grade);
inner.add(studType);
inner.add(card);
inner.add(number);
outter.add(inner);
}
}
catch(Exception e){
e.printStackTrace();
//rs.close();
return null;
}
return outter;
}
}

Dbase.java:此代码略去,主要执行一些通用的数据库操作,如增删改查等等。本例中用到了其executeQuery(String sql)方法,其作用就是返回一个结果集,类型为ResultSet,可以自行改写这个方法,只要返回ResultSet类型即可。

OK,在export.jsp页面中点击提交按钮之后IE就会弹出一个提示框,询问你是要保存还是要打开这个Excel文件。
如下几点需要说明:
1.response.reset();//清空response的buffer
response.setContentType("application/vnd.ms-excel");//设置正确的输出类型
这两句必须要有
2.大家应该注意到ExportExcel.java中还有一个方法
export(String sql,String name,HttpServletRequest request,ServletContext context),它出现在exporting.jsp中蓝色注释部分,它的作用其实与export(OutputStream os,String sql)差不多,只不过前者是首先在服务器上生成一个excel文件,然后在返回页面上提供一个超链接让用户来点击下载或者打开这个Excel文件,而后者则是在IE中动态生成Excel文件,在服务器上没有生成相应的Excel文件。在具体的应用中,可以根据实际需要来选择使用哪个方法。

分享到:
评论

相关推荐

    jsp导出excel一般问题及汇总

    本篇文章主要探讨了在使用JSP导出Excel时可能会遇到的一般性问题及其解决方案。 一、导出Excel的基本流程 1. 数据准备:首先,你需要从数据库或其他数据源获取要导出的数据,将其组织成二维数组或集合。 2. 创建...

    基于Java Excel API的excel文件的操纵技术及其应用.pdf

    通过使用Java Excel API,可以实现excel文件的读取、写入、编辑、格式化、打印等操作,从而满足企业和个人对excel文件的各种需求。 在本文中,我们将详细介绍基于Java Excel API的excel文件的操纵技术,包括excel...

    JSP+SQL基于JSP的学生信息管理系统.rar

    开发过程中可能使用到的工具有Eclipse、IntelliJ IDEA等集成开发环境,以及Tomcat、Jetty等应用服务器。为了提高开发效率,可能还会使用MVC框架如Struts、Spring MVC,或ORM框架如Hibernate,它们能简化JSP与数据库...

    JSP编程技巧

    在企业级应用中,经常需要将数据导出到Excel文件或从Excel读取数据。JSP可以与Java库结合使用,如Apache POI,来实现这一功能。掌握如何在JSP环境中创建、读取和操作Excel文件对于报表生成和数据分析非常重要。 ###...

    jsp-- 【25175 学生成绩信息档案管理系统(中专职高版)】

    6. 数据导出:将学生成绩信息导出为Excel或PDF格式,便于打印和保存。 为了保证系统的稳定性和可扩展性,开发过程中需要注意以下几点: - 数据库设计:合理设计数据库表结构,确保数据的一致性和完整性,使用索引...

    ireport+jsp

    ### iReport与JSP在报表开发中的应用 #### iReport简介 iReport是JasperReports的一个可视化设计工具,主要用于创建报表模板。通过iReport,开发者可以轻松地设计出复杂的报表布局,包括各种图表、列表、汇总等元素...

    【计算机专业JSP-毕业设计100套之】jsp高校学生考勤管理系统设计与实现(源代码+论文)

    5. 数据导入导出:支持从Excel或其他格式导入考勤数据,同时也应提供数据导出功能,方便数据备份和分析。 四、数据库设计 数据库设计是系统的关键部分,可能涉及到学生信息表、考勤记录表、班级信息表等,需要考虑...

    URL汇集、jsp、java学习中各种问题集锦

    - **描述**:该资源汇总了在JSP学习过程中遇到的多种问题及其解决方案。通过收集他人的经验分享,旨在帮助更多开发者解决问题。 ### 2. JSP问题集锦 #### 2.1. 上传问题 - **链接**: ...

    基于jsp的家庭财务管理系统源码数据库论文.doc

    6. 报表导出:用户可以将财务数据导出为Excel或其他格式,方便进一步分析或备份。 7. 安全保障:系统应具备用户权限管理、数据加密等功能,确保用户数据的安全。 【开发过程与实现】 开发过程中,首先设计数据库...

    基于jsp的企业员工工资管理系统源码数据库.doc

    - 统计结果支持导出为Excel格式,便于进一步分析。 4. **工资管理** - 包括但不限于发放工资、调整工资标准等功能。 - 系统还支持自定义计算规则,如根据加班时间计算加班费等。 5. **工资统计** - 针对特定...

    基于JSP的学生考勤管理系统任务书.doc

    - 出勤统计:查看所有学生所有课程的出勤记录,支持数据导出为Excel格式。 - 信息统计:对年级的考勤信息进行汇总分析。 - 密码管理:修改个人登录密码。 设计要求: - 软件设计需考虑易用性、美观性和实用性,...

    java写的超市售货管理系统

    - 使用Apache POI库:这是一个强大的API,可以读取和写入Excel文件,方便将数据批量导入或导出到系统。 - 数据预处理:在导入前,系统会检查Excel格式是否正确,避免因数据格式问题引发错误。 - 导出报表:用户...

    JSP基于SSM+mysql+maven【园林果园树木种植养护管理系统】.rar

    用户信息 &gt;&gt; (修改信息、新增用户、删除用户、根据编号查询、excel导出、用户角色分配) 角色管理 &gt;&gt; (修改信息、新增角色、删除角色、根据编号查询、excel导出、为角色分配菜单增删改查单项目权限、为角色分配...

    报表插件 简单使用

    6. **打印与导出**:报表可以被打印或者导出为多种格式,如PDF、Excel、图片等,方便分享和存档。 7. **定时调度**:设置定时任务,报表可以按需自动生成并发送至指定的电子邮件地址,实现自动化报告。 在描述中...

    基于Java的WebBase业务系统框架设计源码

    本项目是基于Java开发的...该系统框架提供了员工管理、组织机构、请假出差申请、流程审批、信息汇总、Excel导出等基础功能。项目结构清晰,代码注释详尽,适合用于学习和研究Java在WebBase业务系统框架开发中的应用。

    crystalreportviewers

    2. **打印和导出**:提供打印预览功能,并支持将报表导出为PDF、Excel、CSV等多种格式。 3. **交互性**:允许用户在网页上进行数据筛选、翻页、放大缩小等操作。 4. **自定义样式**:开发者可以通过CSS样式表对报表...

    基于Java教师工资管理设计与实现

    - 教师信息导出Excel:支持将教师信息导出为Excel格式,方便进行数据分析或备份。 - 教师工资管理:涵盖工资计算、发放记录和调整等功能,确保工资计算的公正透明。 - 工资统计:自动生成工资报表,包括月度、...

    ireport WEB程序所需JAR包汇总

    在这个"ireport WEB程序所需JAR包汇总"中,我们将探讨使用iReport-5.1.0版本时,Web应用所需的JAR文件及其作用。 首先,iReport-5.1.0版本的运行和集成需要一系列JAR包的支持,这些包通常位于解压后的"lib"目录下。...

    Java水晶报表中文文档

    - Servlet集成:在Web应用中,水晶报表可以嵌入到Servlet或JSP中,实现Web端的动态报表生成。 3. **水晶报表的主要功能** - 数据源管理:支持多种数据源类型,包括关系型数据库、XML、文本文件等。 - 报表设计:...

Global site tag (gtag.js) - Google Analytics