package com.tianwen.springcloud.microservice.base.util; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import com.tianwen.springcloud.microservice.base.dto.course.CourseExcelDTO; public class CourseExcelUtil { /** * 课程导出类 * @param response 响应 * @param fileName 文件名 * @param columnList 每列的标题名 * @param dataList 导出的数据 */ public static void exportCourseExcel(HttpServletResponse response, String fileName, List<CourseExcelDTO> dataList) { List<String> columnList = new ArrayList<String>(); columnList.add("课程名称"); columnList.add("主讲人"); columnList.add("查看权限"); columnList.add("课程方式"); columnList.add("课程分类"); columnList.add("提交人"); columnList.add("参与人数"); columnList.add("浏览次数"); columnList.add("课时数"); columnList.add("课时总时长"); //声明输出流 OutputStream os = null; //设置响应头 setResponseHeader(response,fileName); try { //获取输出流 os = response.getOutputStream(); //内存中保留5000条数据,以免内存溢出,其余写入硬盘 SXSSFWorkbook wb = new SXSSFWorkbook(5000); //获取该工作区的第一个sheet Sheet sheet1 = wb.createSheet("sheet1"); int excelRow = 0; //创建标题行 Row titleRow = sheet1.createRow(excelRow++); for(int i = 0;i<columnList.size();i++) { //创建该行下的每一列,并写入标题数据 Cell cell = titleRow.createCell(i); cell.setCellValue(columnList.get(i)); } //设置内容行 if(dataList != null && dataList.size() > 0) { //外层for循环创建行 for(int i = 0;i<dataList.size();i++) { Row dataRow = sheet1.createRow(excelRow++); //内层for循环创建每行对应的列,并赋值 CourseExcelDTO courseObj = dataList.get(i); for(int j = 0; j < columnList.size(); j++) { Cell cell = dataRow.createCell(j); if(j == 0) { cell.setCellValue(courseObj.getCourseName()); } else if(j == 1) { cell.setCellValue(courseObj.getTeachernames()); } else if(j == 2) { cell.setCellValue(courseObj.getViewRole()); } else if(j == 3) { cell.setCellValue(courseObj.getLessonType()); } else if(j == 4) { cell.setCellValue(courseObj.getCourseTypeName()); } else if(j == 5) { cell.setCellValue(courseObj.getCreateUserName()); } else if(j == 6) { cell.setCellValue(courseObj.getJoins()); } else if(j == 7) { cell.setCellValue(courseObj.getViews()); } else if(j == 8) { cell.setCellValue(courseObj.getLessons()); } else if(j == 9) { cell.setCellValue(courseObj.getCourseLessonTotalTime()); } } } } response.setHeader("Content-disposition", "attachment;fileName=" + fileName + ".xls"); response.setContentType("application/octet-stream;charset=utf-8"); //将整理好的excel数据写入流中 wb.write(os); } catch (IOException e) { e.printStackTrace(); } finally { try { // 关闭输出流 if (os != null) { os.flush(); os.close(); } } catch (IOException e) { e.printStackTrace(); } } } /* 设置浏览器下载响应头 */ private static void setResponseHeader(HttpServletResponse response, String fileName) { try { try { fileName = new String(fileName.getBytes(),"ISO8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } response.setContentType("application/octet-stream;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename="+ fileName); response.addHeader("Pargam", "no-cache"); response.addHeader("Cache-Control", "no-cache"); } catch (Exception ex) { ex.printStackTrace(); } } }
vm.$axios .post(this.$app.jhEduUrl + '/course/exportCourseList', param, { responseType: 'blob' }) .then((resp) => { if (!resp) { console.log('下载数据返回空') return } const link = document.createElement('a'); let blob = new Blob([resp.data], {type: 'application/vnd.ms-excel'}); link.style.display = 'none'; link.href = URL.createObjectURL(blob); link.setAttribute('download', '课程列表信息' + '.xls'); document.body.appendChild(link); link.click(); document.body.removeChild(link); })