excel在工作中比较常用了,对于需要批量导入的需求,一般都是使用excel。excel导入常用poi,但是POI使用繁琐,而且对内存消耗大,这篇文章就是使用easyexcel来解析数据
场景一:将数据批量导出,生成excel,输出到本地
首先导入easyexcel的pom依赖,接下来就开始解析excel了
第一步,创建excel中需要输出的字段,构建java实体
//使用easyexcel写数据,需要先建立表格对应的实体类

public class ExcelEntity {@ExcelProperty("姓名")private String name;@ExcelProperty("年龄")private Integer age;@ExcelProperty("分数")private Integer score;/*** 忽略这个字段*/@ExcelIgnoreprivate String ignore;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getScore() {return score;}public void setScore(Integer score) {this.score = score;}public String getIgnore() {return ignore;}public void setIgnore(String ignore) {this.ignore = ignore;}@Overridepublic String toString() {return "WriteExcelEntity{" +"name='" + name + '\'' +", age=" + age +", score=" + score +", ignore='" + ignore + '\'' +'}';}
}

第二步,将数据封装到excel中,然后将excel输出到本地

/*** 往excel表格里写入数据*/
public class WriteExcelService {//将需要输出的数据写入listprivate List<ExcelEntity> data(){List<ExcelEntity> list=new ArrayList<ExcelEntity>();for (int i=0;i<10;i++){ExcelEntity writeExcelEntity=new ExcelEntity();writeExcelEntity.setName("李白"+i);writeExcelEntity.setAge(10+i);writeExcelEntity.setScore(60+i);list.add(writeExcelEntity);}return list;}//将list中的值写入excel,生成excel@Testpublic void simpWrite(){//指定输出的excel的路径以及名称String fileName="D:/分数统计表.xlsX";//指定按照哪个实体写数据,默认写入第一个sheet,并指定sheet名称EasyExcel.write(fileName,ExcelEntity.class).sheet("分数统计").doWrite(data());}
}

这样就将数据导出到本地了

场景二:解析excel中的数据,转化为java字段
第一步:创建excel中字段的java实体类

public class ExcelEntity {@ExcelProperty("姓名")private String name;@ExcelProperty("年龄")private Integer age;@ExcelProperty("分数")private Integer score;/*** 忽略这个字段*/@ExcelIgnoreprivate String ignore;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getScore() {return score;}public void setScore(Integer score) {this.score = score;}public String getIgnore() {return ignore;}public void setIgnore(String ignore) {this.ignore = ignore;}@Overridepublic String toString() {return "WriteExcelEntity{" +"name='" + name + '\'' +", age=" + age +", score=" + score +", ignore='" + ignore + '\'' +'}';}
}

第二步:创建excel监听器

/*** 使用easyexcel读取数据需要先建立监听器监听excel*/
public class ReadExcelListener extends AnalysisEventListener<ExcelEntity> {//如果有需要将读取到的数据插入数据库的话,默认是每5条插入数据库private static  final int BATCH_SIZE =5;List<ExcelEntity> list=new ArrayList<ExcelEntity>();
////这里就不插入数据库里了,直接将读取的数据输出出来作为演示/***自动注入dao**/@Autowiredprivate ExccelMapper excelMapper;
//   public ReadExcelListener(){
//        excelMapper=new ExccelMapper();
//    }
//    public ReadExcelListener(){
//        this.excelMapper=excelMapper;
//    }/*** 数据读取的核心方法,读取数据会执行这个方法* ExcelEntity:表格对应的实体* AnalysisContext:分析上下文* @param excelEntity* @param analysisContext*/@Overridepublic void invoke(ExcelEntity excelEntity, AnalysisContext analysisContext) {//将读取到的数据输出,JSON.toJSONString(excelEntity就是通过fastjson将数据转化System.out.println(JSON.toJSONString(excelEntity));list.add(excelEntity);//当读取的数据量达到设定的批量规模后,执行插入数据库方法,// 否则将读取的数据都读取出来不插入的话,容易造成内存溢出,下面入库的方法这里就不写了
//        if (list.size()>=BATCH_SIZE){
//            excelMapper.saveData(list);
//            //将插入成功的数据从list清除掉
//            list.clear();
//        }}/*** 所有数据读取完了都会调用的方法* @param analysisContext*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {//在这里也要保存数据,确保最后遗留的数据也存储到数据库//excelMapper.saveData(list);System.out.println("所有数据解析完成");}
}

第三步:编写插入数据入库的代码

@Service
/*** 在实际开发中,还是要按照mvc的规范来写数据的持久化,* 这里只要是为了方便演示效果,就不写入库的操作了*/
public class ExccelMapper  {//持久化操作public void saveData(List<ExcelEntity> list){};
}

第四步:解析数据

public class ReadExcelService {@Testpublic void simpleRead(){//需要读取的数据,在实际开发中应该是先上传excel文件,再解析excel,这里就直接指定本地的文件了String fileName="D:/分数统计表.xlsX";//这里需要指定读取的文件,用哪个class去读,// 读取第几个sheet的数据,默认是第一个sheetEasyExcel.read(fileName,ExcelEntity.class,new ReadExcelListener()).sheet().doRead();}
}

上面代码只是例子,实际开发中,需要自己根据业务字段做相应处理变动。但是步骤和代码里的方法是不变的、
大家有什么不懂的可以问我

使用easyExcel批量导入导出数据相关推荐

  1. CATIA批量导入导出数据到EXCEL

    CATIA批量导入导出数据到EXCEL 序言 一.EXCEL数据点批量导入到CATIA 二.CATIA数据点批量导入到EXCEL 三.VB批量输出点到EXCEL 序言 工作中,由于测量基准和建模基准不 ...

  2. mysql批量导入 导出数据_MySQL批量导入导出数据

    批量向mysql插入(文本)数据的方法有以下3种: 方法1. 可以先将要插入的数据统一保存在 .sql 文件中,各个insert 语句直接用分号分开.之后执行命令: source .sql 文件即可. ...

  3. EasyExcel 批量导入并校验数据

    文章目录 前言 一.pom 二.使用步骤 1.导入对象 2.读入数据并保存 前言 EasyExcel 批量导入并校验数据 一.pom <dependency><groupId> ...

  4. 转载-SQL Server各种导入导出数据方式的比较

    注:本文转载自 http://blog.csdn.net/nokiaguy/article/details/4684822 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新 ...

  5. 使用cardme读写VCard文件,实现批量导入导出电话簿

    转载自 使用cardme读写VCard文件,实现批量导入导出电话簿 首先下载jar包cardme. http://sourceforge.net/projects/cardme/?source=nav ...

  6. Postgresql 批量导入导出表数据

    postgresql没有自带的批量导入导出成CSV的指令,但是有一个调用执行文件的指令(\i),这个指令可以执行编写的脚本.例如 一个a.txt文件,里面内容是 #将xxx表数据导出xxx文件 \co ...

  7. SQL Server数据库导入导出数据方式比较

    在我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验.净化和转换时,将会面临很大的挑战.幸好SQL Server为我们提供了强大.丰富的数据 ...

  8. python读写、导入导出数据操作(简)

    这里的读写文件,与导入导出数据不同,导入数据是直接连接csv或xlsx文件,将数据导入进来或导出保存出去. 这里读文件,是可迭代的,文件使用完毕后还需要关闭. 1. 读取操作 open() 可以读取c ...

  9. 如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV

    文章目录 本教程将详细讲解 1. MySQL / MariaDB 数据库数据「导出」 2. MySQL / MariaDB 数据库数据「导入」 3. 使用「卡拉云」一键导入导出 MySQL / Mar ...

最新文章

  1. linux mysql 数据目录迁移后不生效_mysql 本地数据目录迁移
  2. ubuntu11.04中如何像其他版本一样快速回到桌面
  3. Boost:扩展分配器的测试程序
  4. 为什么说Android才是游戏开发者的乐土?
  5. 对象的序列化与反序列化---IO学习笔记(四)
  6. 产品经理必备的两种心态
  7. 要想赚到最轻松的钱,就要靠资源整合的重要性
  8. Ubuntu ROS Kinect2安装
  9. 基于nvidia的ffmpeg编解码加速
  10. 有哪些比较好用的安卓模拟器(电脑端)
  11. 怎么用计算机计算最小二乘法,最小二乘法_在线最小二乘法计算器
  12. 货币代码php,在PHP中获取货币符号
  13. php nginx 伪静态规则,常见PHP程序的Nginx 伪静态规则
  14. 5000在线的服务器选择,支持负载5000人10000人在线的服务器的配置及其网络要求!!...
  15. 中英文说明书丨CalBioreagents ACTH抗原抗体对
  16. KeyShot 实时光线追踪三维渲染软件
  17. 一个数组实现两个栈(共享栈)
  18. 【C语言】案例二十九 综合案例——体育成绩管理系统
  19. Vue + Vuetify使用感受以及部分自定义组件
  20. 又拿下一块屏幕,中景园2.08寸OLED SH1122 带字库芯片 GT30L32S4W

热门文章

  1. 第N位数字[学会找规律,发现类似通项公式的捷径]
  2. Python图形界面开发框架常用的八款工具包
  3. Java8和Java1.8
  4. ionic4 混合移动开发 (前世今生)
  5. node笔记随笔---kalrry
  6. 刀库计算机错误,加工中心刀库位置错误怎么办
  7. mysql5.6收费吗_免费mysql和收费mysql
  8. 1.虚拟机克隆后的处理步骤
  9. 《炬丰科技-半导体工艺》--技术资料合集24
  10. easyui-datagrid特殊字符不能显示的处理