SSS项目专题(四):导出Excel

1.需求分析

在这里插入图片描述

将选中的数据导出到Excel表格

2.POI概述

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

结构:

    • HSSF - 提供读写Microsoft Excel格式档案的功能。
    • XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
    • HWPF - 提供读写Microsoft Word格式档案的功能。
    • HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
    • HDGF - 提供读写Microsoft Visio格式档案的功能。

HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

POI EXCEL文档结构类

  • HSSFWorkbook excel文档对象
  • HSSFSheet excel的sheet
  • HSSFRow excel的行
  • HSSFCell excel的单元格
  • HSSFFont excel字体
  • HSSFName 名称
  • HSSFDataFormat 日期格式
  • HSSFHeader sheet头
  • HSSFFooter sheet尾
  • HSSFCellStyle cell样式
  • HSSFDateUtil 日期
  • HSSFPrintSetup 打印
  • HSSFErrorConstants 错误信息表

3.导出Excel

①导入依赖

<!--POI执行Excel文件导入和导出的依赖-->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.17</version>
</dependency>

②前端请求

//全选特效
function selectedAll() {
    $("[name=childs]").prop("checked",$("#ckall").prop("checked"));
}

function doExport() {
    //获取选中项的id
    var cks=$("[name=childs]:checked");
    var ids=new Array();
    for(var i=0;i<cks.length;i++){
        var id=cks[i].value;
        ids.push(id);
    }
    if(ids.length>0){
        //发送一个导出Excel的请求到后台!
        location.href="${pageContext.request.contextPath}/stu/doExport/"+ids;
    }else{
        alert("请选择要导出的学生数据!!!");
    }
}

③Controller层

/**
 * 导出Excel
 */
@RequestMapping("/doExport/{ids}")
public void doExport(@PathVariable("ids") List<Long> ids,HttpServletResponse response,HttpServletRequest request) throws Exception{
    //根据ids批量查询学生
    List<Student> students = ss.getStuByIds(ids);
    //把这个对象生成到Excel中去
    //1.创建工作簿
    HSSFWorkbook book = new HSSFWorkbook();
    //2.创建sheet表
    HSSFSheet sheet = book.createSheet();

    //生成抬头行
    HSSFRow row_title = sheet.createRow(0);//抬头行
    String[] titles={"学生编号","学生姓名","学生性别","学生生日","学生电话"};
    for(int i=0;i<titles.length;i++){
        HSSFCell cell = row_title.createCell(i);
        cell.setCellValue(titles[i]);
    }

    //3.遍历集合对象创建行和单元格
    for(int i=0;i<students.size();i++){
        Student s = students.get(i);
        // 创建行(创建了一行)
        HSSFRow row = sheet.createRow(i+1);
		//第一列  id
        HSSFCell cell_id = row.createCell(0);
        cell_id.setCellValue(s.getId());
		//第二列 name
        HSSFCell cell_name = row.createCell(1);
        cell_name.setCellValue(s.getName());
        //第三列 sex
        HSSFCell cell_sex = row.createCell(2);
        cell_sex.setCellValue(s.getSex());
        //第四列 birthday
        HSSFCell cell_birthday = row.createCell(3);
        cell_birthday.setCellValue(s.getBirthday());
		//第五列 phone
        HSSFCell cell_phone = row.createCell(4);
        cell_phone.setCellValue(s.getPhone());

    }

    String fileName="学生信息表_"+new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())+".xls";

    //浏览器下载
    ServletOutputStream outputStream = response.getOutputStream();//浏览器输出字节流
    book.write(outputStream);

    //生成Excel并提供下载
    String userAgent=request.getHeader("User-Agent");

    //解决乱码
    if(userAgent.contains("Safari")){
        response.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8")) ;
    }else{
        //设置请求头以附件的形式打开
        response.addHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"ISO-8859-1")) ;
    }

    outputStream.close();
}

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值