咨询电话:0551-62903161

学术交流

首页>官网首页 > 教育教学 > 学术交流 >
JSP生成Excel文件并导出过程
作者:原创  时间:2018-12-06 13:37
1、选中要导出的文件列表



2、把文件列表对应的记录id保存到数组中
<button class="checkOutxls easyui-linkbutton">导出到Excel</button>
//导出excel表格
$(".checkOutxls").click(function(){
    var arr = [];
    var sl = $(".sl");
    $.each(sl, function(index) {
        if(this.checked){
            arr.push($(this).val());
        }
    });
    if(arr.length==0){
        alert("你还没有选择任何信息!");
    }else{
        location= "jsp/generateExcel.jsp?arr="+arr;
    }
});

3、把数组提交给产生Excel的jsp页面,查询所有的记录封装成对象存放到集合中
<%
    //1、获得id数组
    String arr = request.getParameter("arr");
    //2、存放用户的集合
    List<User> list = new ArrayList<User>();
    //3、创建用户业务类
    UserService userService = new UserServiceImpl();
    //4、分解arr数组,通过id获得对象
    if (arr != null && !arr.equals("")) {
        String[] ids = arr.split(",");
        for (int i = 0; i < ids.length; i++) {
        //5、存放对象到集合中
            list.add(userService.getUserById(Integer.parseInt(ids[i])));
        }
    }
%>
 
4、使用POI技术创建一个工作簿、工作页、及对应对象字段的列,对存放对象的集合进行遍历,
把所有的对象属性值写到excel工作薄中,通过IO流操作保存工作薄
// 把list中的user对象读出来,写到excel中
     public static int creatUserExcel(List<User> list, String path) {
          // 1、指定目标文件
          File target = new File(path);
          OutputStream out = null;
          XSSFWorkbook book = null;
          try {
              out = new FileOutputStream(target);
              // 2、创建工作簿
              book = new XSSFWorkbook();
              // 3、创建工作簿中的页,指定页的名称
              XSSFSheet sheet = book.createSheet("userInfo");
              // 4、创建行
              int rowNum = 0;
              XSSFRow row = sheet.createRow(rowNum++);
              // 5、创第一行的单元格并设置值
              int coulumNum = 0;
              row.createCell(coulumNum++).setCellValue("序号");
              row.createCell(coulumNum++).setCellValue("用户名");
              row.createCell(coulumNum++).setCellValue("密码");
              row.createCell(coulumNum++).setCellValue("年龄");
              row.createCell(coulumNum++).setCellValue("生日");
              row.createCell(coulumNum++).setCellValue("备注");
              // 6、循环输出user对象
              for (int i = 0; i < list.size(); i++) {
                   User st = list.get(i);
                   coulumNum = 0;
                   row = sheet.createRow(rowNum++);
                   row.createCell(coulumNum++).setCellValue(st.getId());
                   row.createCell(coulumNum++).setCellValue(st.getUserName());
                   row.createCell(coulumNum++).setCellValue(st.getPassWord());
                   row.createCell(coulumNum++).setCellValue(st.getAge());
                   row.createCell(coulumNum++).setCellValue(DateUtil.convertUtilDateToString(st.getBirthday()));
                   row.createCell(coulumNum++).setCellValue("");
              }
              // 7、保存文件
              book.write(out);
              System.out.println("创建表成功");
              return 1;
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              // 8、关闭流
              if (book != null) {
                   try {
                        book.close();
                   } catch (Exception e) {
                   }
              }
          }
          return 0;
     }

5、指定工作簿在项目中的位置路径
<%
//6、获得文件夹file的路径
String file = application.getRealPath("file");
String fileName = Commons.getFileName("user.xlsx");
String filePath = file + "\\" + fileName;
//7、把对象放到指定的excel中
userService.creatUserExcel(list, filePath);
%>

<%
//8、执行下载功能
File origin = new File(filePath);
InputStream is = null;
out.clear();
OutputStream ot = null;
try {
    is = new FileInputStream(origin);
    // 9、 设置响应头,控制浏览器下载该文件
    response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    // 10、设置文件ContentType类型,这样设置,会自动判断下载文件类型
    response.setContentType("multipart/form-data");
    // 11、 获得输出输出流
    ot = response.getOutputStream();
    byte[] bt = new byte[1024];
    int len;
    while ((len = is.read(bt)) != -1) {
        ot.write(bt, 0, len);
    }
    ot.flush();
} catch (Exception e) {
    e.printStackTrace();
}finally {
    try {
        if (ot != null) {
            ot.close();
        }
        if (is != null) {
             is.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
%>

7、完成导出excel表格



友情链接:北大青鸟科海学院合肥滨湖职业技术学院合肥公交技校 安徽卫生健康职业学院
获奖信息:

地铁:乘地铁1号线到合工大南区B出口,向南800米即到。

联系我们:招生老师15056993965(微信手机同号)      0551-62903161

地址:合肥市包河区马鞍山路富成大厦4楼北大青鸟(合工大东门斜对面)