返回字节流
controller
@PostMapping("/export")
public ResponseEntity<byte[]> dataExport(@RequestBody StudentDetailReqParam reqParam){
return studentInfoService.dataExport(reqParam.getCourseId(),
reqParam.getPeriodId(),reqParam.getLessonId());
}
selvice
public ResponseEntity<byte[]> dataExport(Integer courseId, Integer periodId, Integer lessonId) {```
SXSSFWorkbook wb = null;
ByteArrayOutputStream outByteStream =null;
HttpHeaders head = null;
try {
wb = new SXSSFWorkbook();
//导出大数量文件 加入临时文件 否则会内存溢出 必须在最后删除缓存文件
wb.setCompressTempFiles(true);
outByteStream = new ByteArrayOutputStream();
head = new HttpHeaders();
head.setContentDispositionFormData("attachment", "student.xls");
head.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//list 获取数据
//excel相关
SXSSFSheet sheet = wb.createSheet("学员数据");
// 产生表格标题行
SXSSFRow row = sheet.createRow(0);
String[] heads = {"学校名","城市","区县","负责人",
"年龄","学生姓名","是否加微信","辅导老师"};
for (int i = 0; i < heads.length; i++) {
SXSSFCell cell = row.createCell(i);
XSSFRichTextString text = new XSSFRichTextString(heads[i]);
cell.setCellValue(text);
}
List<Map<String, String>> list = studentStatisticsMapper.getWeChatStudentList();
//内容填充
int rowCount = 1;//行数,以课程数目
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map<String, String> dataMap = list.get(i);
//创建行
SXSSFRow dataRow = sheet.createRow(rowCount);
SXSSFCell cell0 = dataRow.createCell(0);
cell0.setCellValue(dataMap.get("schoolName"));
SXSSFCell cell1 = dataRow.createCell(1);
cell1.setCellValue(String.valueOf(dataMap.get("cityName")));
SXSSFCell cell2 = dataRow.createCell(2);
cell2.setCellValue(dataMap.get("areaName"));
SXSSFCell cell3 = dataRow.createCell(3);
cell3.setCellValue(dataMap.get("marketName"));
SXSSFCell cell4 = dataRow.createCell(4);
cell4.setCellValue(dataMap.get("gradeName"));
SXSSFCell cell5 = dataRow.createCell(5);
cell5.setCellValue(dataMap.get("realName"));
SXSSFCell cell6 = dataRow.createCell(6);
String wechatStatus = dataMap.get("wechatStatus");
if(wechatStatus.equals("1")){
cell6.setCellValue("是");
}else {
cell6.setCellValue("否");
}
SXSSFCell cell7 = dataRow.createCell(7);
cell7.setCellValue(dataMap.get("teacherName"));
rowCount++;
}
}
try {
wb.write(outByteStream);
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (wb != null) {
wb.dispose();// 删除临时文件,很重要,否则磁盘可能会被写满
}
}
return new ResponseEntity<byte[]>(outByteStream.toByteArray(), head, HttpStatus.OK);