jxl实现Excel文件的生成与下载

来源:互联网 发布:cmd连接linux服务器 编辑:程序博客网 时间:2024/05/17 02:48

Servlet.java代码:

public void toExcel(HttpServletObject obj)
        throws ServletException, IOException {
    HttpServletRequest request = obj.getRequest();

    HttpServletResponse response = obj.getResponse();
    response.setContentType("text/html;charset=UTF-8");

    StringBuffer fileurl = new StringBuffer("文件路径");//如  D:/xx/xx/xxx.xls
    FileOutputStream fos = null;
    WritableWorkbook wwb = null;

    try {
        fos = new FileOutputStream(fileurl.toString());

        //打开文件
        wwb = Workbook.createWorkbook(fos);

        //生成名为“成绩”的工作表,参数0表示这是第一页
        WritableSheet ws = wwb.createSheet("成绩", 0);
                               

        //填写表头数据
        ws.addCell(new Label(0, 0, "学号"));

        ws.addCell(new Label(1, 0, "姓名"));

        ws.addCell(new Label(1, 0, "成绩"));

        //填写表体数据

        //第一条记录
        ws.addCell(new Label(0, 1, "10001"));

        ws.addCell(new Label(1, 1, "张三"));
        jxl.write.Number number = new jxl.write.Number(2,1,80);
        ws.addCell(number);

        //第二条记录

        ws.addCell(new Label(0, 2, "10002"));

        ws.addCell(new Label(1, 2, "李四"));
        jxl.write.Number number1 = new jxl.write.Number(2,2,85);
        ws.addCell(number1);

        //第三条记录

        ws.addCell(new Label(0, 3, "10003"));

        ws.addCell(new Label(1, 3, "王五"));
        jxl.write.Number number2 = new jxl.write.Number(2,3,90);
        ws.addCell(number2);

    }catch(Exception e) {
        System.out.println(e);
    }finally {
        if(wwb != null) {
            try {
                wwb.write();//刷新(或写入),生成一个excel文档
                wwb.close();//关闭
                fos.close();


                exportXML(obj);//下载excel文件
 
            }catch(Exception e) {
                e.printStackTrace();
            }
         }
    }
}

//下载excel文件

public void exportXML(HttpServletObject obj) 
throws IOException {
    HttpServletRequest request = obj.getRequest();
    HttpServletResponse response = obj.getResponse();
    String ENCODING="GB2312";  
    //内容类型  
    String CONTENT_TYPE="text/html;charset=gb2312";  
    //要下载的文件存放的路径  
    String downloadfiledir="XXX"; 
    //设置request对象的字符编码  
    request.setCharacterEncoding(ENCODING);  
    //从request中取出要下载文件的名字  
    String filename = "xxx.xls";
    if(filename==null||filename.trim().equals("")){  
        //设置response对象的ContentType  
        response.setContentType(CONTENT_TYPE);  
        //输出错误信息  
        PrintWriter out=response.getWriter();  
        out.println("<font color=red>导出文件失败!</font>");  
        out.close();  
     }else{  
        //下载文件的完整路径名  
        String fullfilename=downloadfiledir+filename;    
        //根据文件的类型设置response对象的ContentType  
        String contentType=getServletContext().getMimeType(fullfilename);  
        if(contentType==null)  {
            contentType="application/octet-stream"; 

        } 
        response.setContentType(contentType);  
        //设置response的头信息  
        response.setHeader("Content-disposition","attachment;filename=\""+filename+"\"");  
        InputStream is=null;  
        OutputStream os=null;  
        try{  
            is=new BufferedInputStream(new FileInputStream(fullfilename));  
            //定义输出字节流  
            ByteArrayOutputStream baos=new ByteArrayOutputStream();  
            //定义response的输出流  
            os=new BufferedOutputStream(response.getOutputStream());  
            //定义buffer  
            byte[] buffer=new byte[4*1024]; //4k Buffer  
            int read=0;  
            //从文件中读入数据并写到输出字节流中  
            while((read=is.read(buffer))!=-1){  
                baos.write(buffer,0,read);  
            }  
            //将输出字节流写到response的输出流中  
            os.write(baos.toByteArray());  
        }catch(IOException e){  
            e.printStackTrace();  
        }finally{  
            //关闭输出字节流和response输出流  
            os.close();  
            is.close();  
        }  
    }
}

JSP代码:

<form id="form"  method="post"  action="./Servlet?method=toExcel">

    <input type="submit" value="下载成绩表"  />
</form>


注意以下几点:

1.不能通过在js中的$.getJSON("./Servlet", {method: "toExcel"});方式调用Servlet中的toExcel方法,必须通过form的action。

2.exportXML的参数不能是HttpServletRequest request,HttpServletResponse response(ps:并不清楚原因)

3.本人是新手,文章可能存在错误,请大神指教!

0 0