EasyExcle的基本使用
1、导入
<!-- EasyExcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
2、读取
//读取文件
//创建ExcleReaderBuilder实例
ExcelReaderBuilder readerBuilder = EasyExcel.read();
//获取要读取的文件对象
readerBuilder.file("C:\\Users\\521\\Desktop\\sys_user.xls");
//指定sheet:不指定,会默认读取全部的sheet
readerBuilder.sheet("sys_user");
//自动关闭输入流
readerBuilder.autoCloseStream(true);
//设置excle文件格式 .xls
readerBuilder.excelType(ExcelTypeEnum.XLS);
//注册一个监听器:将每一行读取的结果,进行解析
readerBuilder.registerReadListener(new AnalysisEventListener<Object>() {
@Override
public void invoke(Object o, AnalysisContext analysisContext) {
//一行数据读取完成之后的回调
System.out.println(o);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
//通知用户:所有的行已经读取完毕
System.out.println("数据读取完毕");
}
});
//构建读取器
ExcelReader reader = readerBuilder.build();
//读取数据
reader.readAll();
//读取完毕
reader.finish();
可以通过泛型指定数据类型,Map集合。
//读取文件
//创建ExcleReaderBuilder实例
ExcelReaderBuilder readerBuilder = EasyExcel.read();
//获取要读取的文件对象
readerBuilder.file("C:\\Users\\521\\Desktop\\sys_user.xls");
//指定sheet:不指定,会默认读取全部的sheet
readerBuilder.sheet("sys_user");
//自动关闭输入流
readerBuilder.autoCloseStream(true);
//设置excle文件格式 .xls
readerBuilder.excelType(ExcelTypeEnum.XLS);
//注册一个监听器:将每一行读取的结果,进行解析
readerBuilder.registerReadListener(new AnalysisEventListener<Map<Integer,String>>() {
@Override
public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
Set<Integer> keySet = integerStringMap.keySet();
Iterator<Integer> interator = keySet.iterator();
while(interator.hasNext()) {
Integer key = interator.next();
System.out.print(key +":" +integerStringMap.get(key)+", ");
}
System.out.println("");
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
//通知用户:所有的行已经读取完毕
System.out.println("数据读取完毕");
}
});
//构建读取器
ExcelReader reader = readerBuilder.build();
//读取数据
reader.readAll();
//读取完毕
reader.finish();
实际开发中,对上述代码进行简化
List<Map<Integer, String>> list = new LinkedList<>();
EasyExcel.read("C:\\Users\\521\\Desktop\\sys_user.xls") //获取要读取的文件对象
.sheet("sys_user") //指定sheet:不指定,会默认读取全部的sheet
.registerReadListener(new AnalysisEventListener<Map<Integer, String>>(){ //注册一个监听器:将每一行读取的结果,进行解析
@Override
public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
//把每一次读取的一行integerStringMap放入list
list.add(integerStringMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("数据读取完毕");
}
}).doRead();
//比例List中的数据
for(Map<Integer, String> integerStringMap:list){
Set<Integer> keySet =integerStringMap.keySet();
Iterator<Integer> interator= keySet.iterator();
while(interator.hasNext()){
Integer key =interator.next();
System.out.print(key+":"+integerStringMap.get(key)+", ");
}
//遍历完一个元素:输出一个换行
System.out.println("");
}
映射成指定的对象
映射指定的实体类:
/**
* 主键
*/
@ExcelProperty("id") //指定读取excle的列名
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户名
*/
@ExcelProperty("user_name")
private String userName;
解析excle文件的时候,直接解析实体类:
@ExcelProperty(value = "字符串标题", index = 0)
value :列的标题名称 index:列所在的列数:为0:表示写在第一行
List<SysUser> list = new ArrayList<>();
EasyExcel.read("C:\\Users\\521\\Desktop\\sys_user.xls") //获取要读取的文件对象
.head(SysUser.class)
.sheet("sys_user") //指定sheet:不指定,会默认读取全部的sheet
.registerReadListener(new AnalysisEventListener<SysUser>(){ //注册一个监听器:将每一行读取的结果,进行解析
@Override
public void invoke(SysUser sysUser, AnalysisContext analysisContext) {
list.add(sysUser);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("数据读取完毕");
}
}).doRead();
for(SysUser sysUser : list){
System.out.println(sysUser);
}
3、写入
//简化版:绑定映射的实体类
//测试easyExcle
//写入数据
@Test
public void testEasyExcle3(){
List<SysUser> list = new ArrayList<>();
EasyExcel.read("C:\\Users\\521\\Desktop\\sys_user.xls") //获取要读取的文件对象
.head(SysUser.class) //每一列的标题
.sheet("sys_user") //指定sheet:不指定,会默认读取全部的sheet
.registerReadListener(new AnalysisEventListener<SysUser>(){ //注册一个监听器:将每一行读取的结果,进行解析
@Override
public void invoke(SysUser sysUser, AnalysisContext analysisContext) {
list.add(sysUser);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("数据读取完毕");
}
}).doRead();
for(SysUser sysUser : list){
System.out.println(sysUser);
}
//list写入excle文件
EasyExcel.write("C:\\Users\\521\\Desktop\\sys_user_副本.xls")
.head(SysUser.class)//每一列的标题
.excelType(ExcelTypeEnum.XLS)
.sheet("sys_user")
.doWrite(list);
}
4、springboot读取数据库生产excle
@PostMapping("/sysUser/List")
public ResponseResult<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(defaultValue = "") String search) {
LambdaQueryWrapper<SysUser> wrapper = Wrappers.lambdaQuery();
// if (StrUtil.isNotBlank(search)) {
// wrapper.like(Role::getName, search);
// }
Page<SysUser> RolePage = sysUserMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
System.out.println("************");
//断点调试捕获 列表
System.out.println(RolePage.getRecords());
//list写入excle文件
EasyExcel.write("C:\\Users\\521\\Desktop\\sys_user_副本1.xls")
.head(SysUser.class) //每一列的标题
.excelType(ExcelTypeEnum.XLS)
.sheet("sys_user")
.doWrite(RolePage.getRecords());
System.out.println("************");
return new ResponseResult(200,"查询用户列表成功",RolePage);