导入依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>easyexcel</artifactId>
  4. <version>2.2.0-beta2</version>
  5. </dependency>
  1. easyexcel中集成了很多依赖包 包括poi 为防止冲突要删掉其它poi

一:写入

  1. https://www.yuque.com/easyexcel/doc/write

新建生成excel的实体类

  1. @Data
  2. public class DemoData {
  3. @ExcelProperty("字符串标题")
  4. private String string;
  5. @ExcelProperty("日期标题")
  6. private Date date;
  7. @ExcelProperty("数字标题")
  8. private Double doubleData;
  9. /**
  10. * 忽略这个字段
  11. */
  12. @ExcelIgnore
  13. private String ignore;
  14. }

写入测试

  1. public class WriteTest {
  2. String PATH = "C:\\Users\\HB\\Desktop\\";
  3. private List<DemoData> data() {
  4. List<DemoData> list = new ArrayList<DemoData>();
  5. for (int i = 0; i < 10; i++) {
  6. DemoData data = new DemoData();
  7. data.setString("字符串" + i);
  8. data.setDate(new Date());
  9. data.setDoubleData(0.56);
  10. list.add(data);
  11. }
  12. return list;
  13. }
  14.  
  15. @Test
  16. public void simpleWrite() {
  17. // 写法1
  18. String fileName = PATH + "easyexecl.xlsx";
  19. EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
  20. }
  21. }

仅需一行代码就能写入

  1. EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());

二:读取

  1. https://www.yuque.com/easyexcel/doc/read

创建读取excel的实体类

  1. @Data
  2. public class DemoData {
  3. private String string;
  4. private Date date;
  5. private Double doubleData;
  6. }

配置监听器

(重点就是invoke 每读一行数据就会调用一次invoke 每满5条就存一次数据库 最后调doAfterAllAnalysed 把剩余的数据存入数据库)

  1. // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
  2. public class DemoDataListener extends AnalysisEventListener<DemoData> {
  3. private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class);
  4. /**
  5. * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
  6. */
  7. private static final int BATCH_COUNT = 5;
  8. List<DemoData> list = new ArrayList<DemoData>();
  9. /**
  10. * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
  11. */
  12. private DemoDAO demoDAO;
  13. public DemoDataListener() {
  14. // 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
  15. demoDAO = new DemoDAO();
  16. }
  17. /**
  18. * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
  19. *
  20. * @param demoDAO
  21. */
  22. public DemoDataListener(DemoDAO demoDAO) {
  23. this.demoDAO = demoDAO;
  24. }
  25. /**
  26. * 这个每一条数据解析都会来调用
  27. *
  28. * @param data
  29. * one row value. Is is same as {@link AnalysisContext#readRowHolder()}
  30. * @param context
  31. */
  32. @Override
  33. public void invoke(DemoData data, AnalysisContext context) {
  34. LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
  35. list.add(data);
  36. // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
  37. if (list.size() >= BATCH_COUNT) {
  38. saveData();
  39. // 存储完成清理 list
  40. list.clear();
  41. }
  42. }
  43. /**
  44. * 所有数据解析完成了 都会来调用
  45. *
  46. * @param context
  47. */
  48. @Override
  49. public void doAfterAllAnalysed(AnalysisContext context) {
  50. // 这里也要保存数据,确保最后遗留的数据也存储到数据库
  51. saveData();
  52. LOGGER.info("所有数据解析完成!");
  53. }
  54. /**
  55. * 加上存储数据库
  56. */
  57. private void saveData() {
  58. LOGGER.info("{}条数据,开始存储数据库!", list.size());
  59. demoDAO.save(list);
  60. LOGGER.info("存储数据库成功!");
  61. }
  62. }

测试类

  1. @Test
  2. public void simpleRead() {
  3. // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
  4. // 写法1:
  5. String fileName = "demo.xlsx";
  6. EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
  7. }

EasyExcel学习的更多相关文章

  1. SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多

    关于封面:晚饭后回自习室的路上 Easyexcel 官方文档 Easyexcel | github 前言 最近也是在写的一个小练习中,需要用到这个.趁着这次就将写个整合的Demo给大家. 希望能够让大 ...

  2. 阿里 EasyExcel 7 行代码优雅地实现 Excel 文件生成&下载功能

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  3. 使用 EasyExcel 写Excel数据(表头动态)

    引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...

  4. 使用 EasyExcel 读取Excel(两种方式)

    引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...

  5. 使用easyExcel遇到的坑

    最近有个功能,用easyExcel代替poi ,这个确实方便了不少,但是使用easyExcel也踩到了很多坑,在这里记录下easyExcel存在的问题,希望阅读这篇文档的人,可以更好的避免这些. 1. ...

  6. SpringBoot图文教程14—SpringBoot集成EasyExcel「上」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

  7. Java实现导入导出Excel:POI和EasyExcel

    文章与CSDN同步,欢迎访问:https://blog.csdn.net/qq_40280582/article/details/107300081 代码地址:https://gitee.com/il ...

  8. 海量数据Excel报表利器——EasyExcel(开场篇)

    EasyExcel 简介篇 互联网的精髓就是共享,可以共享技术.共享经验.共享情感.共享快乐~ 很多年前就有这个想法了,从事IT行业时间也不短了,应该把自己工作和业余所学习的东西记录并分享出来,和有缘 ...

  9. 海量数据Excel报表利器——EasyExcel(一 利用反射机制导出Excel)

    EasyExcel 写入(导出) 互联网的精髓就是共享,可以共享技术.共享经验.共享情感.共享快乐~ 很多年前就有这个想法了,从事IT行业时间也不短了,应该把自己工作和业余所学习的东西记录并分享出来, ...

随机推荐

  1. Django(简介)

    Django django对大家来说肯定不陌生啦,下面就简单的介绍一下,基础的使用以及django的特点吧 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多 ...

  2. 制作MySQL的Windows服务+创建用户及授权

         在上一篇随笔中详述了MySQL的Windows 64位版本的安装,以及初始化操作.启动服务端.客户端连接.一些基本的文件操作等.然而在进行这些操作的时候,需要我们去输入一长串的路径和命令才能 ...

  3. 数理统计5:指数分布的参数估计,Gamma分布,Gamma分布与其他分布的联系

    今天的主角是指数分布,由此导出\(\Gamma\)分布,同样,读者应尝试一边阅读,一边独立推导出本文的结论.由于本系列为我独自完成的,缺少审阅,如果有任何错误,欢迎在评论区中指出,谢谢! 目录 Par ...

  4. oss-server 小型对象存储系统

    oss-server 项目介绍 oss-server是针对项目开发时提供的小型对象存储系统,开发者在针对文件上传时业务剥离,同时方便文件迁移,为满足单个项目,多个系统的情况下,提供统一的oss服务 o ...

  5. struts 返回字符串

    方法一: HttpServletResponse response = ServletActionContext.getResponse(); response.getWriter().print(& ...

  6. Spring 的循环依赖,源码详细分析 → 真的非要三级缓存吗

    开心一刻 吃完晚饭,坐在院子里和父亲聊天 父亲:你有什么人生追求? 我:金钱和美女 父亲对着我的头就是一丁弓,说道:小小年纪,怎么这么庸俗,重说一次 我:事业与爱情 父亲赞赏的摸了我的头,说道:嗯嗯, ...

  7. Educational Codeforces Round 67 E.Tree Painting (树形dp)

    题目链接 题意:给你一棵无根树,每次你可以选择一个点从白点变成黑点(除第一个点外别的点都要和黑点相邻),变成黑点后可以获得一个权值(白点组成连通块的大小) 问怎么使权值最大 思路:首先,一但根确定了, ...

  8. HDU6430 Problem E. TeaTree【dsu on tree】

    Problem E. TeaTree Problem Description Recently, TeaTree acquire new knoledge gcd (Greatest Common D ...

  9. 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)

    题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...

  10. 【uva 714】Copying Books(算法效率--二分+贪心)

    题意:将1个含N个正整数的序列划分成K个连续的子序列,使每段的和的最大值尽量小,问字典序最小的划分方案. 解法:由于是连续的数的"最大值最小",便可想到二分每段的最大值,若这时可分 ...