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);
