1:导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
实现文件上传:需要监听类
1:创建excel表的实体类
@Data
public class ReadData {
// 设置列对应的属性
@ExcelProperty(value = "学生编号",index = 0)
private Integer no;
@ExcelProperty(value = "学生姓名",index = 1)
private String name;
}
2:controller写法
/**
* 上传execl文件,解析数据到数据库
* @param file
* @return
*/
@ApiOperation("上传excel,解析excel接口")
@PostMapping("uploadExcel")
public R uploadExcel(MultipartFile file){
eduSubjectService.uploadExcelFile(file);
return R.ok();
}
3: excel 读取数据的监听 主要是继承AnalysisEventListener<ReadData> 之后,重写invoke方法,然后在里面处理数据
public class ExcelListener extends AnalysisEventListener<ReadData> {
List<ReadData> list = new ArrayList<ReadData>();
// 一行一行去读取excel内容
@Override
public void invoke(ReadData readData, AnalysisContext analysisContext) {
System.out.println(readData);
list.add(readData);
}
// 读取excel表头信息
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头信息:"+headMap);
}
// 读取完成后执行
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
文件下载
1:创建excel实体类
@Data
public class WriteData {
// 设置表头属性名称
@ExcelProperty("学生编号")
private Integer no;
@ExcelProperty("学生姓名")
private String name;
}
2:测试写
public class TestExcelWriteData {
public static void main(String[] args) {
// 写法1
String fileName = "D:\\excel\\11.xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel.write(fileName, WriteData.class).sheet("写入方法一").doWrite(data());
}
//循环设置要添加的数据,最终封装到list集合中
private static List<WriteData> data() {
List<WriteData> list = new ArrayList<WriteData>();
for (int i = 0; i < 10; i++) {
WriteData data = new WriteData();
data.setNo(i);
data.setName("张三"+i);
list.add(data);
}
return list;
}
}