背景:
在平时的代码业务中,通常会有生成报表的需求,但是对于java原生的API来实现的话,会很麻烦,而且最重要的是出现的结果可能还不尽人意。所以,我们这次来使用SpringBoot来实现报表功能的实现。
解决步骤:
1.导入辅助依赖
<!--hutool工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.7</version>
</dependency>
<!-- poi-ooxml依赖 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
其中hutool-all依赖里面包含了许多的工具类,如日期、时间、字符串以及Excel工具类等等。
其中在进行生成Excel报表的时候我们需要依赖到poi-ooxml依赖。
2.编写后端接口
步骤:
- 首先从数据库中获取要生成报表的数据
- 将查询出的数据对象转换成Map<String,Object>的形式,并将其放入到List集合中。
- 创建ExcelWriter对象,将数据写入到Excel中
// 创建ExcelWriter对象
ExcelWriter ew = ExcelUtil.getWriter(true);
// 将数据写入到Excel文件中
ew.write(list,true);
4.下载报表
//5.这个Excel表下载下来
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setHeader("Content-Disposition","attachment;filename=type.xlsx");
ServletOutputStream os = response.getOutputStream();
ew.flush(os, true);
ew.close();
IoUtil.close(System.out);
3.完整代码示例
//1.从数据库中查询数据 List<Type> all = typeService.findAll(); if (CollectionUtil.isEmpty(all)){ throw new CustomException("未找到数据"); } List<Map<String,Object>> list = new ArrayList<>(); //2.取出每条数据 然后将其封装到Map集合中 for (Type type : all) { Map<String,Object> row = new HashMap<>(); row.put("分类名称",type.getName()); row.put("分类描述",type.getDescription()); //3.将其放入List集合中 list.add(row); } //4.创建ExelWriter对象 将数据写入Excel文件中 ExcelWriter ew = ExcelUtil.getWriter(true); ew.write(list,true); //5.这个Excel表下载下来 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); response.setHeader("Content-Disposition","attachment;filename=type.xlsx"); ServletOutputStream os = response.getOutputStream(); ew.flush(os, true); ew.close(); IoUtil.close(System.out);