SpringBoot使用EasyExcel导入/导出excel

1.前言

springboot项目中处理excel时,如将前端传的excel处理后存入数据库或将数据库数据导出成excel,可使用EasyExcel进行处理,EasyExcel使用方式详见官网地址

2.读excel

2.1定义读监听器

监听器代码如下:

@Getter
public class UploadExcelListener<T> extends AnalysisEventListener<T> {
    List<T> data = new ArrayList<>();
    @Override
    public void invoke(T excelData, AnalysisContext analysisContext) {
        // 每处理一行数据,将数据添加到list中
        data.add(excelData);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {}

}

2.2controller

controller层代码如下:

@PostMapping("/saveByExcel")
public BaseResponse saveByExcel(@RequestPart("file") MultipartFile file) {
	service.saveByExcel(file);
	return new BaseResponse<>();
}

2.3service

service层代码如下:

public void saveByExcel(MultipartFile file) {
// excel 数据
List<YourEntity> list = processExcel(file);
// 根据自己的业务进行相应处理
}

private List<YourEntity> processExcel(MultipartFile file) {
	UploadExcelListener<YourEntity> uploadExcelListener = null;
	try {
		uploadExcelListener = new UploadExcelListener<>();
		EasyExcel.read(file.getInputStream(), YourEntity.class, uploadExcelListener).sheet().doRead();
	} catch (IOException e) {
		log.warn("文件上传失败", file.getName());
	}
	return uploadExcelListener.getData();
}

3.写excel

3.1controller

controller层代码如下:

@GetMapping("/exportToExcel")
public void exportToExcel(HttpServletResponse response) {
	service.exportToExcel(response);
    }

3.2service

service层代码如下:

public void exportToExcel(HttpServletResponse response) {
	// listAll为查询数据库方法,根据自身业务需求进行实现
	List<YourEntity> list = listAll();
	response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
	response.setCharacterEncoding("utf-8");
	String fileName = "data.xlsx";
	response.setHeader("Content-disposition", "attachment;filename=" + fileName);
	try {
		EasyExcel.write(response.getOutputStream(), YourEntity.class).sheet("sheet名").doWrite(list);
	} catch (IOException e) {
		log.warn("导出失败");
	}
}

大功告成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值