EasyExcel

EasyExcel是阿里开发的一款快速读写Excel表格的java工具,

今天教大家如何使用

第一步引入依赖:

<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.1</version>
</dependency>
</dependencies>

因为EasyExcel本质上是对poi做的一个封装,所以还需要引入poi的依赖,这里就不贴上来了,需要的直接去maven中央仓库搜就可以了。

第二步:

创建实体类

比如:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DemoData {
//设置表头名称

@ExcelProperty("学生编号")
private int sno;
 //设置表头名称
@ExcelProperty("学生姓名")
private String sname;
}

第三步:

读写操作:

实现写操作:

//循环设置要添加的数据,最终封装到list集合中
private static List<DemoData> data() {
List<DemoData> list = new ArrayList<DemoData>();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setSno(i);
data.setSname("张三"+i);
list.add(data);
 }
return list; }

public static void main(String[] args) throws Exception {
// 写法1
String fileName = "E:\\demo.xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动
关闭
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel.write(fileName, DemoData.class).sheet("写入方法一").doWrite(data());
}

实现读操作:

1创建实体类:

public class ReadData {
//设置列对应的属性
@ExcelProperty(index = 0)
private int sid;
//设置列对应的属性
@ExcelProperty(index = 1)
private String sname;
public int getSid() {
return sid;
 }
public void setSid(int sid) {
this.sid = sid;
 }
public String getSname() {
return sname;
 }
public void setSname(String sname) {
this.sname = sname;
 }
@Override
public String toString() {
return "ReadData{" +
"sid=" + sid +
", sname='" + sname + '\'' +
'}';
 }
}

创建读取操作的监听器

//创建读取excel监听器
public class ExcelListener extends AnalysisEventListener<ReadData> {
//创建list集合封装最终的数据
List<ReadData> list = new ArrayList<ReadData>();
//一行一行去读取excle内容
@Override
public void invoke(ReadData user, AnalysisContext analysisContext) {
System.out.println("***"+user);
list.add(user);
 }
//读取excel表头信息
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext
context) {
System.out.println("表头信息:"+headMap);
 }
//读取完成后执行
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
 }
}

注意:因为ExcelListener不能交给Spring管理,需要自己new,不能注入其他对象。不能实现数据库操作。

所以可以在这里直接把Service传进来,就是增加一个有参构造,参数就是你写的Service接口,假设叫userService,然后在其他地方new ExcelListener(userService)。

把这里的代码变成:

public class ExcelListener extends AnalysisEventListener<DemoData> {

//新添加的-----------------------------------------

 public EduSubjectService subjectService;
    public SubjectExcelListener() {}
    public SubjectExcelListener(EduSubjectService subjectService) {
        this.subjectService = subjectService;
    }


//------------------------------------------------
//创建list集合封装最终的数据
List<DemoData> list = new ArrayList<DemoData>();
//一行一行去读取excle内容
@Override
public void invoke(DemoData user, AnalysisContext analysisContext) {
System.out.println("***"+user);
list.add(user);
 }
//读取excel表头信息
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext
context) {
System.out.println("表头信息:"+headMap);
 }
//读取完成后执行
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
 }
}

 

调用实现最终的读取:
 

public static void main(String[] args) throws Exception {
//写法一
String fileName = "E:\\01.xlsx";
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
EasyExcel.read(fileName, DemoData.class, new
ExcelListener()).sheet().doRead();
// 写法2:
InputStream in = new BufferedInputStream(new
FileInputStream("E:\\01.xlsx"));
ExcelReader excelReader = EasyExcel.read(in, DemoData.class, new
ExcelListener()).build();
ReadSheet readSheet = EasyExcel.readSheet(0).build();
excelReader.read(readSheet);
// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
excelReader.finish();
}

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值