使用jxl实现导出Excel,解决路径和删除文件的问题

我这个是写在JSP中的。用Servlet,Action神马的都不错。

首先建立一个JSP: ExportExcel.jsp.

    <%@page import="java.net.URLEncoder"%>
<%@page import="org.qdga.xtkh.model.QueryTemp"%>
<%
    //杜宏浩
    //2012-3-7
    //导出Excel



        //获得参数list  以便于后面遍历
    List<QueryTemp> list=(List<QueryTemp>)request.getAttribute("queryList");
    System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"+list.size());

    //产生随机数 防止文件名称冲突
    Calendar cld = Calendar.getInstance();
    Date date = new Date();
    cld.setTime(date);
    int year = cld.get(Calendar.YEAR);
    int month = cld.get(Calendar.MONTH) + 1;
    int day = cld.get(Calendar.DAY_OF_MONTH);
    int hour = cld.get(Calendar.HOUR_OF_DAY);
    int min = cld.get(Calendar.MINUTE);
    int second = cld.get(Calendar.SECOND);
    int rand = (int) ((Math.random() * 10000));
    StringBuffer sb = new StringBuffer();
    sb.append(year);
    sb.append(month);
    sb.append(day);
    sb.append(hour);
    sb.append(min);
    sb.append(second);
    sb.append(rand);
    sb.append(".xls");
    String fillPath = sb.toString();
    try {
        // 打开文件
        WritableWorkbook book = Workbook.createWorkbook(new File(
                fillPath));
        // 生成名为“第一页”的工作表,参数0表示这是第一页
        WritableSheet sheet = book.createSheet(" 第一页 ", 0);
        // 合并第一列第一行到第六列第一行的所有单元格
        sheet.mergeCells(0, 0, 3, 0);
        //字串格式化
        WritableFont font1 = new WritableFont(WritableFont.TIMES, 16,
                WritableFont.BOLD);
        WritableCellFormat format1 = new WritableCellFormat(font1);
        format1.setAlignment(jxl.format.Alignment.CENTRE);
        // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)    
        // 以及单元格内容为test
        Label label = new Label(0, 0, " 巡检提报统计 ", format1);
        // 将定义好的单元格添加到工作表中
        sheet.addCell(label);
        sheet.addCell(new Label(1, 1, "部门名称"));
        sheet.addCell(new Label(3, 1, "数量"));
        
//遍历添加list到excel单元格中。
        for(int i=0;i<list.size();i++)
        {
        sheet.addCell(new Label(1, i+2, list.get(i).getDeptName()));
        sheet.addCell(new Label(3, i+2,String.valueOf( list.get(i).getNum())));
        }
        
        
        sheet.addCell(new Label(1, 8, "注:列表中未出现的部门,说明该部门的此类信息数量为0."));

        //            jxl.write.Number number = new jxl.write.Number(0, 1, 555.12541);
        //            sheet.addCell(number);
        // 写入数据并关闭文件
        book.write();
        book.close();

    } catch (Exception e) {
        System.out.println(e);
    }

    //获得Tomcat的工作目录 --->bin
    String userDir = System.getProperty("user.dir");
    File file = new File(userDir + "/" + fillPath);

    InputStream fis = new BufferedInputStream(new FileInputStream(file));
    byte[] buffer = new byte[fis.available()];
    fis.read(buffer);
    fis.close();
    // 清空response  
    response.reset();
    // 设置response的Header
    response.setCharacterEncoding("UTF-8");
    String fileName = URLEncoder.encode(file.getName(), "UTF-8");
    response.addHeader("Content-Disposition", "attachment;filename="
            + new String(fileName.getBytes()));
    response.addHeader("Content-Length", "" + file.length());
    response.setContentType("application/ms-excel");
    OutputStream os = response.getOutputStream();

    os.write(buffer);
    os.flush();
    os.close();
//重写out 清除OutputStream冲突异常
    out.clear();
    out = pageContext.pushBody();
%>


需要注意的是,jxl导出Excel默认路径为Tomcat下的bin目录。原因以及是否能改变路径,我都不得而知。
于是用System.getProperty("user.dir");拿到bin目录下的权限。通过文件流传递到前端提供下载。

Copyright 杜宏浩。  http://www.ytcbo.com

//增加功能---------
//文件下载完毕后删除 节约资源
    File file2 = new File(fillPath);
    if (file2.isFile() && file2.exists()) {
        file2.delete();
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值