当前位置:   article > 正文

springboot实现导入与导出(Excel)_@responseexcel

@responseexcel

1.依赖添加

        我是使用的hutool类库中的ExcelWriter和ExcelReader类,所以我们需要添加hutool依赖,添加依赖代码如下

  1. <dependency>
  2. <groupId>cn.hutool</groupId>
  3. <artifactId>hutool-all</artifactId>
  4. <version>5.7.20</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.poi</groupId>
  8. <artifactId>poi-ooxml</artifactId>
  9. <version>4.1.2</version>
  10. </dependency>
  11. </dependencies>

2.导出功能实现

导出功能的实现分为以下七个步骤:

(1)数据查询

(2)选择写出到磁盘或者在浏览器操作

(3)自定义表头名

(4)写出

(5)设置浏览器响应格式

(6)获取输出流并将数据刷新到输出流

(7)关闭输出流和write

代码如下:

  1. //导出
  2. @GetMapping("/export")
  3. public void export(HttpServletResponse response) throws Exception{
  4. List<User> list=userService.list();//数据查询
  5. /* ExcelWriter writer = ExcelUtil.getWriter("/");*///写出到磁盘
  6. ExcelWriter writer = ExcelUtil.getWriter(true);//在浏览器操作
  7. writer.addHeaderAlias("id","工号");
  8. writer.addHeaderAlias("username","职称");
  9. writer.addHeaderAlias("password","密码");
  10. writer.addHeaderAlias("nickname","姓名");
  11. writer.addHeaderAlias("email","邮箱");
  12. writer.addHeaderAlias("phone","电话");
  13. writer.addHeaderAlias("address","地址");
  14. writer.addHeaderAlias("createTime","修改时间"); //自定义表头名
  15. writer.write(list,true);//一次性写出list到write
  16. //浏览器响应设置
  17. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
  18. String fileName= URLEncoder.encode("员工信息","UTF-8");//设置文件名并编码
  19. response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");
  20. ServletOutputStream out=response.getOutputStream();//获取输出流
  21. writer.flush(out,true);//将数据写入输出流
  22. out.close();//关闭输出流
  23. writer.close();//关闭writer
  24. }

运行结果:

3.导入功能实现:

代码如下:

  1. //导入
  2. @PostMapping("/import")
  3. public void imp(MultipartFile file) throws Exception{
  4. InputStream inputStream=file.getInputStream();
  5. ExcelReader reader=ExcelUtil.getReader(inputStream);//获取流
  6. List<User> list=reader.readAll(User.class);//读取流,注意一定要指定范形,否则默认是objec类型,会保错
  7. System.out.println(list);
  8. }

运行结果:

我这里是用的apifox的api测试接口进行测试

4.一些小问题:

导出的excel有的列显示的是#,像这样

导致这种情况是因为列宽太小,解决方案

(1)拖一下就好

(2)用ExcelWriter里的setColumnWidth方法,第一个参数为指定列(-1为全部列),第二个参数为列宽

        writer.setColumnWidth(-1,18);

(3)用ExcelWriter里的autoSizeColumnAll方法,可以自适应列宽,但是此方法的列宽标准是第一行,如果下面的行字符数量比第一行多,则会导致下面行显示为#号

        writer.autoSizeColumnAll();

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

闽ICP备14008679号