1.导入依赖包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beta5</version>
</dependency>
2.控制层代码
/**
* 导出年级下所有学生住宿信息
* @param resp
* @param bid 任务id
* @throws Exception
*/
@RequestMapping(value = "/exportStudentOfGrade", method = RequestMethod.GET)
public void exportStudentOfGrade(HttpServletResponse resp, String bid) throws Exception {
//固定excel头部
List<String> headerlist=new ArrayList<>();
headerlist.add("姓名");
headerlist.add("联系电话");
headerlist.add("年级");
headerlist.add("班级");
headerlist.add("班主任");
headerlist.add("班主任联系方式");
String dates = currentStayTaskMapper.getStayTaskDatesByCondition(bid);
String[] dateArray = dates.replace("[", "").replace("]", "").split(",");
//动态excel头部
for(String date:dateArray){
headerlist.add(date);
}
Sheet sheet = new Sheet(1, 0);
sheet.setSheetName("留宿任务住宿信息");
List<List<String>> headers=new ArrayList<>();
if(CollectionUtils.isNotEmpty(headerlist)){
for(String header:headerlist){
headers.add(Lists.newArrayList(header));
}
}
//导出的数据
List<List<Object>> datas=new ArrayList<>();
//后面的代码都是为了拼接导出的数据datas
// List<TreeMap<String,Object>> list=new ArrayList<>();
//查询该任务下的所有住宿信息
List<SsglStayTaskClassInfo> stuStayInfoJsonList = currentStayTaskMapper.getStuStayInfoJsonByBid(bid);
if(CollectionUtils.isNotEmpty(stuStayInfoJsonList)){
for(SsglStayTaskClassInfo bean:stuStayInfoJsonList){
String stuStayInfoJson = bean.getStuStayInfoJson();
if(StringUtils.isNotBlank(stuStayInfoJson)){
List<StuStayInfoJson> stuStayInfoJsons = JSON.parseArray(stuStayInfoJson, StuStayInfoJson.class);
if(CollectionUtils.isNotEmpty(stuStayInfoJsons)){
for (StuStayInfoJson model:stuStayInfoJsons) {
String stuBid=model.getStuBid();
List<String> stayInfo = model.getStayInfo();
TreeMap<String,Object> m=currentStayTaskMapper.getStayInfoByStuBid(stuBid);
Object stuName = m.get("stuName");
Object phoneNum = m.get("phone_num");
Object gradeName = m.get("grade_name");
Object name = m.get("name");
Object userName = m.get("user_name");
Object classMasterPhone = m.get("classMasterPhone");
List<Object> rowDataList=new ArrayList<>();
rowDataList.add(stuName);
rowDataList.add(phoneNum);
rowDataList.add(gradeName);
rowDataList.add(name);
rowDataList.add(userName);
rowDataList.add(classMasterPhone);
if(CollectionUtils.isNotEmpty(stayInfo)){
for(String stayStatus:stayInfo){
if(StayTaskStatusEnum.STAY.getValue().equals(stayStatus)){
rowDataList.add(StayTaskStatusEnum.STAY.getName());
}else if(StayTaskStatusEnum.DONT_STAY.getValue().equals(stayStatus)){
rowDataList.add(StayTaskStatusEnum.DONT_STAY.getName());
}else{
rowDataList.add(StayTaskStatusEnum.DONT_SURE_STAY.getName());
}
}
datas.add(rowDataList);
}else{
datas.add(Lists.newArrayList(stuName,phoneNum,gradeName,name,userName,classMasterPhone));
}
}
}
}
}
}
OutputStream out = getOutputStream(resp, "留宿任务住宿信息", ExcelTypeEnum.XLSX);
//使用EasyExcelFactory来写流数据
ExcelWriter writer = EasyExcelFactory.getWriter(out, ExcelTypeEnum.XLSX, true);
sheet.setHead(headers);
writer.write1(datas,sheet);
writer.finish();
}
/**
* 得到流
* @param response 响应
* @param fileName 文件名
* @param excelTypeEnum excel类型
* @return
*/
private OutputStream getOutputStream(HttpServletResponse response, String fileName,
ExcelTypeEnum excelTypeEnum) {
try {
// 设置响应输出的头类型
if (Objects.equals(".xls", excelTypeEnum.getValue())) {
//导出xls格式
response.setContentType("application/vnd.ms-excel;charset=GBK");
} else if (Objects.equals(".xlsx", excelTypeEnum.getValue())) {
//导出xlsx格式
response.setContentType(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=GBK");
}
// 设置下载文件名称(注意中文乱码)
response.addHeader("Content-Disposition",
"attachment;filename=" + new String((fileName).getBytes("GB2312"), "ISO8859-1") + excelTypeEnum
.getValue());
response.addHeader("Pragma", "No-cache");
response.addHeader("Cache-Control", "No-cache");
response.setCharacterEncoding("utf8");
return response.getOutputStream();
} catch (IOException e) {
//LOGGER.error("EasyExcelUtil-->getOutputStream exception:", e);
}
return null;
}