大家好 , 我是苏麟 , 也是很久没有更新了 , 今天带来一个很好使用的一个库 easyexcel.
JAVA后端开发中可能会遇到一个问题 , 就是处理Execel表格 , 当然不一定非要用Java 我们在这里只说在Java里怎么去处理表格 .
Easy Excel
我们今天要说到就是 Easy Excel , 这个是阿里的项目
官方文档连接 : https://easyexcel.opensource.alibaba.com/
可直接点 : EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel (alibaba.com)
引入依赖
com.alibaba
easyexcel
3.1.0
下面开始读Excel
两种方式 :
第一种最简单方式
Demo : 例如我们有一个表格
第一步在Java中创建一个类 , 每一个标题对应一个字段
@Data
public class ExcelDemo {
/**
* 用户编号
*/
@ExcelProperty("用户编号")
private String userId;
/**
* 用户姓名
*/
@ExcelProperty("用户姓名")
private String username;
}
第二步准备一个读取数据的类
/**
* 用户
*/
public class UserImportExcel {
public static void main(String[] args) {
//获取Excel的绝对路径
String fileName = "T:\\projrct\\src\\main\\java\\com\\sl\\ExcelOnce\\sll.xlsx";
//打印数据
userList.forEach(System.out::println);
//读取数据
List userList = EasyExcelFactory.read(fileName).head(ExcelDemo.class).sheet().doReadSync();
//过滤掉重复数据
Map> collectList =
userList.stream()
.filter(suer -> StringUtils.isNotEmpty(suer.getUsername()))
.collect(Collectors.groupingBy(ExcelDemo::getUsername));
System.out.println("不重复数据数量是 : " + collectList.keySet().size());
}
}
运行结果
第二种方式 : 监听器
第一步在Java中创建一个类
@Data
public class ExcelDemo {
/**
* 用户编号
*/
@ExcelProperty("用户编号")
private String userId;
/**
* 用户姓名
*/
@ExcelProperty("用户姓名")
private String username;
}
第二步准备一个监听器
@Slf4j
public class ExcelDemoListener implements ReadListener {
/**
* 这个每一条数据解析都会来调用
*
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(ExcelDemo data, AnalysisContext context) {
System.out.println(data);
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
System.out.println("数据处理完成");
}
}
第三步准备实现的类
public class ImportExcel {
public static void main(String[] args) {
//获取Excel的路径
String fileName = "T:\\projrct\\src\\main\\java\\com\\sl\\ExcelOnce\\sll.xlsx";
/**
* 方法1.监听器
* 优点: 清晰便于维护
* 缺点:要写监听器 , 一次只能处理一条数据
*/
readByListener(fileName);
}
/**
* 通过监听器的方法来读取数据
*
* @param fileName
*/
public static void readByListener(String fileName) {
//读取数据
EasyExcelFactory.read(fileName, ExcelDemo.class, new ExcelDemoListener()).sheet().doRead();
}
}
结果是一样的
读取表格还是很简单的 , 学会读取表格之后写入表格就更简单了
写入表格
准备一个和表格字段一样的类
@Data
public class ExcelDemo {
/**
* 用户编号
*/
@ExcelProperty("用户编号")
private String userId;
/**
* 用户姓名
*/
@ExcelProperty("用户姓名")
private String username;
}
准备一个写入表格的类
public class UserImportExcel {
public static void main(String[] args) {
// 已读取和处理后的数据列表
List dataList = userList;
//Excel表的名称
String fileName = "sll.xlsx";
EasyExcel.write(fileName, ExcelDemo.class)
.sheet("数据表")
.doWrite(dataList);
}
}
}
这里会把原来的数据覆盖掉......
当然也有许多好用的处理Excel表格的库 例如 : apache poi , easypoi ......
如果想了解更多 , 请看官网文档 , 会给您带来一种新的感受......
拜拜 , 期待下一次的见面!