使用easyExcel批量导入导出数据
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批量导入导出数据相关推荐
- CATIA批量导入导出数据到EXCEL
CATIA批量导入导出数据到EXCEL 序言 一.EXCEL数据点批量导入到CATIA 二.CATIA数据点批量导入到EXCEL 三.VB批量输出点到EXCEL 序言 工作中,由于测量基准和建模基准不 ...
- mysql批量导入 导出数据_MySQL批量导入导出数据
批量向mysql插入(文本)数据的方法有以下3种: 方法1. 可以先将要插入的数据统一保存在 .sql 文件中,各个insert 语句直接用分号分开.之后执行命令: source .sql 文件即可. ...
- EasyExcel 批量导入并校验数据
文章目录 前言 一.pom 二.使用步骤 1.导入对象 2.读入数据并保存 前言 EasyExcel 批量导入并校验数据 一.pom <dependency><groupId> ...
- 转载-SQL Server各种导入导出数据方式的比较
注:本文转载自 http://blog.csdn.net/nokiaguy/article/details/4684822 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新 ...
- 使用cardme读写VCard文件,实现批量导入导出电话簿
转载自 使用cardme读写VCard文件,实现批量导入导出电话簿 首先下载jar包cardme. http://sourceforge.net/projects/cardme/?source=nav ...
- Postgresql 批量导入导出表数据
postgresql没有自带的批量导入导出成CSV的指令,但是有一个调用执行文件的指令(\i),这个指令可以执行编写的脚本.例如 一个a.txt文件,里面内容是 #将xxx表数据导出xxx文件 \co ...
- SQL Server数据库导入导出数据方式比较
在我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验.净化和转换时,将会面临很大的挑战.幸好SQL Server为我们提供了强大.丰富的数据 ...
- python读写、导入导出数据操作(简)
这里的读写文件,与导入导出数据不同,导入数据是直接连接csv或xlsx文件,将数据导入进来或导出保存出去. 这里读文件,是可迭代的,文件使用完毕后还需要关闭. 1. 读取操作 open() 可以读取c ...
- 如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV
文章目录 本教程将详细讲解 1. MySQL / MariaDB 数据库数据「导出」 2. MySQL / MariaDB 数据库数据「导入」 3. 使用「卡拉云」一键导入导出 MySQL / Mar ...
最新文章
- 深入理解计算机系统答案2.11,深入理解计算机系统 第十一章
- Apollo 11登月代码成Github热度第一:14.5万行,获星3.3万
- Linux cp 实现强行覆盖
- android 利用类的同名方法欺骗jni调用(一)
- terminate和quit导致串口资源被占用
- HTML 静态网页制作12月2日表单样式
- 把Cloud for Customer的attachment视图直接放到工作中心视图去
- linux sql 语句菜鸟,Linux安装mysql
- float去掉小数点之后_float类型的存储方式
- Qt工作笔记-对Qt工作线程的进一步理解
- 浅谈基于软交换的下一代网络技术
- java 蓝桥杯历届试题 分糖果(题解)
- android7开发问题,Android开发问题总结(一)
- php多个 运算_php计算多个集合的笛卡尔积实例详解
- 新华书店牵手阿里云 要用云计算打造“智慧悦读”
- android逆向基础教程二
- Java字符串相关的类详解
- 使用计算机自带的wifi,电脑的自带无线网卡你知道怎么用吗?赶紧学习一下
- 前端vue+后台node实现获取微信用户基本信息+调用微信JS-SDK(上篇)
- awk linux 分隔_Linux:批量修改分隔符(awk、BEGIN、FS、OFS、print、tr命令)