使用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;
	}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中使用EasyExcel导出动态数据Excel文件的代码如下: 1. 首先,我们需要导入`easyexcel`的依赖。在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.3.0</version> </dependency> ``` 2. 创建一个Excel工具类,用于导出Excel文件。假设我们已经有一个名为`ExcelUtil`的工具类。 ```java import com.alibaba.excel.EasyExcel; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.List; @Component public class ExcelUtil { public void export(HttpServletResponse response, List<Object> data) throws IOException { // 设置响应头信息 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("导出文件", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); // 导出Excel文件 EasyExcel.write(response.getOutputStream(), Object.class).sheet("Sheet1").doWrite(data); } public void exportTemplate(HttpServletResponse response) throws IOException { // 设置响应头信息 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("模板文件", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); // 导出模板文件 InputStream inputStream = getClass().getClassLoader().getResourceAsStream("template.xlsx"); EasyExcel.write(response.getOutputStream()).withTemplate(inputStream).sheet().doWrite(null); } } ``` 3. 创建一个Controller类,用于处理导出Excel的请求。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/excel") public class ExcelController { @Autowired private ExcelUtil excelUtil; @GetMapping("/export") public void exportExcel(HttpServletResponse response) throws IOException { // 模拟动态数据,实际场景中可以根据业务需求获取数据 List<Object> data = new ArrayList<>(); data.add("数据1"); data.add("数据2"); data.add("数据3"); // 导出Excel文件 excelUtil.export(response, data); } @GetMapping("/template") public void exportTemplate(HttpServletResponse response) throws IOException { // 导出Excel模板文件 excelUtil.exportTemplate(response); } } ``` 以上代码演示了使用Spring Boot和EasyExcel导出动态数据Excel文件的过程。在Controller中,我们可以根据实际业务需求获取数据,并调用`ExcelUtil`中的方法实现导出操作。同时,我们也提供了导出Excel模板文件的方法,以方便用户进行数据录入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值