当前位置:   article > 正文

easypoi导出数据的两种方式(动态表头导出和静态表头导出)_easypoi 导出列的顺序

easypoi 导出列的顺序

一.选定easypoi版本(maven依赖)

  1. <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi</artifactId>
  4. <version>4.1.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>cn.afterturn</groupId>
  8. <artifactId>easypoi-base</artifactId>
  9. <version>4.2.0</version>
  10. </dependency>

二.导出的方式

1.默认写死的实体顺序导出

1.定义实体User类,实体类上有注解,注解属性: name 导出excel的表头   orderNum 字段在excel的顺序   replace  替换 将数字转为对应的含义

  1. public class User implements Serializable {
  2. private static final long serialVersionUID = -6909818297910280264L;
  3. @Excel(name = "用户id",orderNum = "0")
  4. private Integer userId;
  5. @Excel(name = "用户姓名",orderNum = "1")
  6. private String userName;
  7. @Excel(name = "用户年龄",orderNum = "2")
  8. private Integer age;
  9. @Excel(name = "用户地址",orderNum = "3")
  10. private String userAddress;
  11. @Excel(name = "性别", replace = {"男_10", "女_20"} ,orderNum = "4")
  12. private Integer sex;
  13. }

2.controller层代码 注意:方法的请求格式只能是get请求,post将失败

  1. @GetMapping("/exportOrderList")
  2. public String exportOrderList(HttpServletResponse response,HttpServletRequest request){
  3. List<User> exportList = getUserList();
  4. try {
  5. String excelName = "用户信息表";
  6. response.setHeader("content-Type","application/vnd.ms-excel");
  7. response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(excelName , "UTF-8") + ".xls");
  8. response.setCharacterEncoding("UTF-8");
  9. Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(null, excelName), User.class, exportList);
  10. workbook.write(response.getOutputStream());
  11. } catch (IOException e) {
  12. return "exportOrderList=====ERROR=====";
  13. }
  14. return null;
  15. }
  16. private List<User> getUserList(){
  17. List<User> resultList = new ArrayList<>();
  18. User user = new User();
  19. user.setUserId(1);
  20. user.setUserName("李玉刚");
  21. user.setAge(32);
  22. user.setUserAddress("新贵妃醉酒");
  23. user.setSex(20);
  24. User user1 = new User();
  25. user1.setUserId(2);
  26. user1.setUserName("刘德华");
  27. user1.setAge(59);
  28. user1.setUserAddress("冰雨");
  29. user1.setSex(10);
  30. resultList.add(user);
  31. resultList.add(user1);
  32. return resultList;
  33. }

3.导出截图

2.动态表头导出

1.创建一个表头实体

  1. public class DynamicTablePo implements Serializable{
  2. private static final long serialVersionUID = 8991244829305414889L;
  3. //表头名字
  4. private String filedShowName;
  5. //表头key值和查询出来的数据的实体相对应
  6. private String filedCode;
  7. //表头顺序
  8. private Integer orderNum;
  9. //字段数据类型
  10. private Integer dataType;
  11. }

2.创建想要的表头集合(这里是实现动态表头的定义

  1. private List<DynamicTablePo> getTalePoList() {
  2. List<DynamicTablePo> resultList = new ArrayList<>();
  3. DynamicTablePo tablePo = new DynamicTablePo();
  4. tablePo.setFiledShowName("用户名称");
  5. tablePo.setFiledCode("userName");
  6. tablePo.setOrderNum(1);
  7. tablePo.setDataType(0);
  8. DynamicTablePo tablePo1 = new DynamicTablePo();
  9. tablePo1.setFiledShowName("用户地址");
  10. tablePo1.setFiledCode("userAddress");
  11. tablePo1.setOrderNum(2);
  12. tablePo1.setDataType(0);
  13. resultList.add(tablePo);
  14. resultList.add(tablePo1);
  15. return resultList;
  16. }

3.controller层代码

  1. @GetMapping("/moveExport")
  2. public String moveExport(HttpServletResponse response,HttpServletRequest request){
  3. List<User> exportList = getUserList();
  4. List<DynamicTablePo> tablePoList = getTalePoList();
  5. List<ExcelExportEntity> beanList = new ArrayList<ExcelExportEntity>(tablePoList.size());
  6. for (DynamicTablePo tablePo : tablePoList){
  7. ExcelExportEntity entity = new ExcelExportEntity();
  8. entity.setName(tablePo.getFiledShowName());
  9. entity.setKey(tablePo.getFiledCode());
  10. entity.setOrderNum(tablePo.getOrderNum());
  11. if (tablePo.getDataType() == 1){//TODO 这块控制一下,是不是要写成数值型,默认
  12. entity.setType(BaseEntityTypeConstants.DOUBLE_TYPE);
  13. }
  14. beanList.add(entity);
  15. }
  16. try {
  17. String excelName = "用户信息表";
  18. ExportParams exportParams = new ExportParams(excelName, "sheet1");
  19. Workbook workbook = ExcelExportUtil.exportExcel(exportParams, beanList , exportList);
  20. response.setHeader("content-Type","application/vnd.ms-excel");
  21. response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(excelName + "导出表", "UTF-8") + ".xls");
  22. response.setCharacterEncoding("UTF-8");
  23. workbook.write(response.getOutputStream());
  24. workbook.close();
  25. } catch (FileNotFoundException e) {
  26. return "导出选中的单据 exportOrderList=====ERROR=====";
  27. } catch (IOException e) {
  28. return "导出选中的单据 exportOrderList=====ERROR=====";
  29. }
  30. return null;
  31. }

重点代码:ExcelExportUtil.exportExcel(exportParams, beanList , exportList);

beanList :动态表头集合

exportList:动态数据集合

4.导出截图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/584408
推荐阅读
相关标签
  

闽ICP备14008679号