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();
}