官网镇楼↓,觉得我写的不好的同学可以去官网看哦
Maven
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.3.3</version> </dependency>
Excel 导入
示例:
如上一个简易 Excel 表格,表头占了两行,且第三列开始才为有效数据,那么我们应该如何导入?
建造实体类
首先无论是导入还是导出,都需要先建对应的实体类
如图所示,因为我的示例 Excel 一共需要读13列信息,所以定义了13个字段,统一用 String 类型接受
你需要做的就是以列为字段建造一个接受信息的实体类
并且在每一个字段上加上 @ExcelProperty 注解
这个注解内容对应你的列信息,支持以索引、名称的方式关联列信息
- 如果你想让这个字段读取第 6 列的值
@ExcelProperty(index = 6)
- 如果你想让这个字段读取某个列名的值
@ExcelProperty(value = "训练类型标签")
开始读取
建造好实体类后就可以开始读取了
如果看不懂只想运行,只需要拷贝代码,更改我注释的地方即可
java
//指定你需要读取的文件路径
String fileName = "D:\\MCLDownload\\test.xlsx";
//修改为你的实体类名
EasyExcel.read(fileName, ActionExcelEntity.class, new ReadListener<ActionExcelEntity>() {
/**
* 读取 10 行保存一次
*/
public static final int BATCH_COUNT = 10;
private List<ActionExcelEntity> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
@Override
public void invoke(ActionExcelEntity data, AnalysisContext context) {
cachedDataList.add(data);
if (cachedDataList.size() >= BATCH_COUNT) {
try {
saveData(cachedDataList);
} catch (IOException e) {
throw new RuntimeException(e);
}
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
try {
saveData(cachedDataList);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
//得到解析数据 --> 处理 --> 存储数据库
//这个 List 的容量就是上面定义的 10
//在这里进行你想要的操作
private void saveData(List<ActionExcelEntity> cachedDataList) throws
IOException {
//遍历集合,调用你的 mapper 存到数据库
log.info("存储数据库成功!");
}
//这个 2 代表行头,意味着跳过行头直接从第3行开始读
}).sheet().headRowNumber(2).doRead();
}
导出数据
同样的先建造实体类
建实体类
与导入不同的是你需要手动指定每个字段对应的列号,使用 @ExcelProperty 的 value 和 index指定列名称和列顺序(从0开始)
如果需要导出时间,参考图片中的支付时间列
也可以使用 @ColumnWidth 列宽和 @ContentRowHeight(25) 行高 和 @HeadRowHeight(50) 表头高
代码导出
最后代码导出
java
//需要导出的路径
String fileName = "D:\\MCLDownload\\" + name + ".xls";
EasyExcel.write(fileName, FeiShuExcelEntity.class)
.sheet("模板")
.doWrite(() -> {
//list 代表你想输出的类集合,每个元素都是一行
return list;
});