使用easyExcel导出动态excel头部相关数据

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

猜你喜欢

转载自blog.csdn.net/qq_40974235/article/details/109162305