[转]JSP导出excel

本文介绍了如何使用JSP结合Java和JXL库导出查询结果到Excel文件。通过在`exporting.jsp`中接收查询条件,调用`ExportExcel`类的方法,生成包含姓名、学号、奖项类别等信息的Excel文件。同时,文章提到了两种导出方式:直接在服务器生成文件供用户下载,或者在浏览器中动态生成Excel。
摘要由CSDN通过智能技术生成

转自:http://blog.sina.com.cn/s/blog_477049090100ayp5.html

在开发MIS系统的过程中,客户经常会提出这样的要求:将查询结果导出为Excel文件保存下来。经常是写一次就忘一次,因此决定今天将以前的代码和遇到的问题进行一下总结,下面进入正题。
背景:本例的代码来源于我给学校开发的一个奖学金管理系统,使用者在前台设置一组查询条件之后,点击“导出”按钮即可得到Excel文件了。
目的:得到一个Excel文件,包括姓名、学号、奖项类别、所在院系、年级、学生类别、银行卡号、金额等内容项
文件:export.jsp(前台页面,指定搜索条件)、exporting.jsp(后台页面,export.jsp的action)、ExportExcel.java(javabean文件,负责具体的操作)、Dbase.java(javabean文件,负责数据库操作)
代码:
export.jsp:此代码略去,主要是指定搜索条件
exporting.jsp:
<%@ page contentType="text/html;
charset=gb2312" 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" content="text/html; charset=gb2312">
<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[i]);//参数依次代表列数、行数、内容
                       worksheet.addCell(label);//写入单元格
                                                  }
                //开始写入内容
                for(int i=0;i<content.size();i++){
         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值