依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
写操作:
写出这样一个excel
1.编写一个写入类
package com.xjh.eduservice.entity.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//lombok注释 可以getter setter toString代替
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExcelWriteSubject {
//每行的数据是一个对象 需要每列的表头
//设置表头名称
@ExcelProperty("一级分类")
private String oneSubject;
//设置表头名称
@ExcelProperty("二级分类")
private String twoSubject;
}
excel里每一行看做一个对象 改行的每一列数据的表头用
@ExcelProperty注解设置
2.方法:获得一个装满每行数据的列表
public static List<ExcelWriteSubject> excelWrite(){
List<ExcelWriteSubject> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
ExcelWriteSubject data = new ExcelWriteSubject();
data.setOneSubject("前端");
data.setTwoSubject("ccccc+++++");
list.add(data);
}
return list;
}
写入
//写方法
public static void main(String[] args) throws Exception {
String fileName = "F:\\11.xlsx";
//参数 文件名 每行内容的类 下面的sheet名 类的列表数据
EasyExcel.write(fileName, ExcelWriteSubject.class)
.sheet("写入方法一").doWrite(excelWrite());
}
write方法 参数分别是 1.文件名 2.写入内容的类
sheet代表表格下面显示的sheet
dowriter 传入list集合
读操作:
1.创建读类
package com.xjh.eduservice.entity.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExcelReadSubject {
//设置列对应的属性
@ExcelProperty(index = 0)
private String oneSubject;
//设置列对应的属性
@ExcelProperty(index = 1)
private String twoSubject;
}
index = 0代表第一列的数据
index = 1代表第二列 以此类推
2.读方法需要写Listener监听器
package com.xjh.eduservice.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import com.xjh.eduservice.entity.vo.ExcelReadSubject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
//创建读取excel监听器
public class ExcelListener extends AnalysisEventListener<ExcelReadSubject> {
//创建list集合封装最终的数据
List<ExcelReadSubject> list = new ArrayList<>();
//一行一行去读取excle内容
@Override
public void invoke(ExcelReadSubject subject, AnalysisContext analysisContext) {
System.out.println("***"+subject);
list.add(subject);
}
//读取excel表头信息
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头信息:"+headMap);
}
//读取完成后执行
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
3.读取方法
//读
public static void main(String[] args) throws Exception {
String fileName = "F:\\11.xlsx";
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
EasyExcel.read(fileName, ExcelReadSubject.class, new ExcelListener()).sheet().doRead();
}
sheet表示读取哪个sheet
上面是本地
--------------------------------------------
网络流
try {
EasyExcel.read(file.getInputStream(),ExcelReadSubject.class,
new ExcelListener(eduSubjectService)).sheet().doRead();
} catch (IOException e) {
e.printStackTrace();
}