`
hukejia
  • 浏览: 83598 次
  • 性别: Icon_minigender_2
  • 来自: 哈尔滨
文章分类
社区版块
存档分类
最新评论

jsp导出Excel

阅读更多
在开发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++){

                      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[i]);//参数依次代表列数、行数、内容

                      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. 创建...

    jsp导出Excel;简单实用!导出Excel;导出Word

    总之,JSP导出Excel和Word是常见的功能需求,通过Apache POI库可以轻松实现。正确设置响应头和使用流处理可以确保文件能被正确下载,同时根据实际需求调整数据处理和样式设置,能够创建符合业务需求的导出文件。

    JSP导出excel和pdf格式

    一、JSP导出Excel 1. **准备库**:在JSP中导出Excel,通常会用到Apache POI库。这是一个用于读写Microsoft Office格式文件的Java库,包括Excel。首先,需要将POI库添加到项目依赖中。 2. **创建Excel工作簿**:...

    java及jsp下导出excel表格

    #### 结合JSP导出Excel 在Web应用中,通常会结合JSP页面来动态生成Excel文件并提供下载。这涉及到设置正确的HTTP响应头,以便浏览器识别文件类型和进行下载。例如,在JSP中可以这样设置: ```jsp *,javax.servlet....

    jsp导出excel

    "jsp导出excel"就是这样一个功能,它涉及到的技术主要包括JSP、Servlet、Apache POI库以及HTTP响应头的设置。 首先,要理解JSP如何导出Excel,我们需要知道Servlet在其中的作用。Servlet是Java Web应用程序的一部分...

    jsp导出excel并支持分sheet导出的方法.docx

    ### JSP导出Excel并支持分Sheet导出的方法详解 #### 概述 在Web开发领域,特别是使用Java Server Pages (JSP)进行后端处理的应用程序中,经常需要将数据库中的数据导出到Excel文件中供用户下载或进一步处理。这种...

    JSP导出Excel.docx

    标题中的“JSP导出Excel.docx”表明我们要讨论的主题是使用Java服务器页面(JSP)来生成Excel文件。描述部分未提供具体内容,但我们可以基于标题和标签来深入讲解。 在Java开发中,导出Excel文件是常见的需求,通常...

    关于jsp导出excel用javascript实现

    关于jsp导出excel用javascript实现

    jsp页面导出excel

    在JSP页面导出Excel时,我们会用到POI库来创建和操作Excel工作簿、工作表和单元格。首先,确保项目中已经引入了Apache POI的相关依赖。 2. **服务器端代码** 在后端Java代码中,你需要创建一个Servlet或者...

    JSP导出Excel,数字格式化成字符串

    在IT行业中,尤其是在...总结来说,JSP导出Excel并保持数字格式的关键在于创建和应用自定义的单元格样式,避免Excel自动转换为科学计数法。通过Apache POI库,我们可以灵活地控制Excel文件的生成,满足各种格式需求。

    jsp 导出excel

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而“jsp 导出excel”这个主题则是关于如何使用JSP来生成并导出数据到Excel文件中的过程。这种功能通常在企业级应用中非常常见,比如报表生成、...

    JSP导出Excel文件的方法

    在JSP中导出Excel文件是一项常见的...总之,JSP导出Excel文件涉及的主要技术点有:JExcelAPI的使用、HTTP响应头的设置、以及样式和数据的组织。通过这些技术,你可以方便地在Web应用中为用户提供Excel文件的下载服务。

    ireport利用jsp导出excel&pdf;报表源代码

    【标题】:“ireport利用jsp导出excel&pdf;报表源代码” 【描述】:“本人验证过的jsp代码,ireport导出pdf excel报表” 在Java Web开发中,生成各种类型的报表是常见的需求,例如用于数据分析、业务统计或者数据...

    JSP 导出Excel表格的实例

    JSP导出Excel表格实例知识分享: JSP(Java Server Pages)是一种基于Java技术用于开发动态网页的服务器端技术,它的主要作用是在HTML网页中嵌入Java代码。使用JSP导出Excel表格,可以让用户将网页中的表格数据转换...

    jsp导入导出excel文件

    **二、导出Excel到JSP** 1. **创建Excel文件**:在服务器端,使用Apache POI创建一个新的工作簿对象,然后添加工作表。根据需要设置标题行和其他格式。 2. **填充数据**:从数据库或其他数据源获取数据,使用POI ...

    jsp程序excel导出功能

    本人试过了可以用,做jsp程序导出excel功能的可以参考下,下载后按照模版进行修改

Global site tag (gtag.js) - Google Analytics