java导入Excel(使用阿里巴巴的easyexcel)
1. 第一步引入pom
引入easyexcel 的pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
我输出时和实体类字段Date(时间格式化)用到了fastjson 用到了就引入,用不到可以不引
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
2. 第二步写代码
一定要有无参构造
@Data
public class ExcelEntity {
private String name;
@JSONField(format = "yyyy-MM-dd")
private Date birthday;
private Integer age;
}
此处我延续了AnalysisEventListener的泛型,(易扩展) 此类不支持Spring IOC
public class ExcelListener<T> extends AnalysisEventListener<T> {
private static final int BATCH_COUNT = 5;
List<T> list = new ArrayList<T>();
// 此处可传Spring IOC对象进行保存数据库
public ExcelListener(){
};
// 读取每一条
@Override
public void invoke(T data, AnalysisContext context) {
System.out.println(JSON.toJSONString(data));
if (list.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理 list
list.clear();
}
list.add(data);
}
// 读取完毕后
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("读取完成!");
saveData();
list.clear();
}
// 保存操作
private void saveData(){
System.out.println("存入数据库");
}
}
写接口Controller
@PostMapping("/addExcel")
public String addExcel(MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), ExcelEntity.class, new ExcelListener<ExcelEntity>()).sheet().doRead();
return "ok";
}
3. 测试结果
成功结果!
控制台输出结果!
{"age":1,"birthday":"2020-11-19","name":"张1"}
{"age":2,"birthday":"2020-11-19","name":"张2"}
{"age":3,"birthday":"2020-11-19","name":"张3"}
{"age":4,"birthday":"2020-11-19","name":"张4"}
{"age":5,"birthday":"2020-11-19","name":"张5"}
{"age":6,"birthday":"2020-11-19","name":"张6"}
存入数据库
{"age":7,"birthday":"2020-11-19","name":"张7"}
{"age":8,"birthday":"2020-11-19","name":"张8"}
{"age":9,"birthday":"2020-11-19","name":"张9"}
{"age":10,"birthday":"2020-11-19","name":"张10"}
读取完成!
存入数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器