Java实用的Excel下载,Excel导出功能
各位好,今天分享项目中实际使用的Excel导出与下载功能
在开始之前,需要引入maven依赖
<!-- easypoi 依赖-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
</dependency>
笔者采用的是把需要导入数据的Excel模版放置在本地目录下
如图
大家可以看到,模版文件在resources的templateFile文件夹下,当然,如果把文件放在Minio或其他服务器上均也是可以的。
话不多说,直接贴代码,第一个方法是下载模版文件
@ApiOperation(value = "下载任务导入Excel模版")
@PostMapping("/downloadTaskExcel")
public ApiResult<Boolean> downloadTaskExcel(HttpServletResponse response) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
String fileName = URLEncoder.encode("任务导入Excel模版", "UTF-8");
outputStream = response.getOutputStream();
// 获取springboot resource 路径下的文件
inputStream = this.getClass().getResourceAsStream("/templateFile/任务导入Excel模版.xlsx");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
IOUtils.copy(inputStream, outputStream);
} catch (Exception e) {
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.toString());
} finally {
closeInput(inputStream);
flushOutput(outputStream);
}
return ApiResult.success(true);
}
采用POSTMAN调用该接口可以save成一个File,可以看到该模版文件长这个样子:
然后我们看第二个接口为解析Excel接口
@ApiOperation(value = "Excel导入任务数据")
@PostMapping("/excelDataInto")
public ApiResult<ExcelDataInVO> excelDataInto( @RequestParam String batchId, @RequestParam MultipartFile file) throws Exception {
//创建Easy poi 导入对象
ImportParams params = new ImportParams();
//去掉标题行
params.setTitleRows(0);
//读取Excel文件中的数据
List<ExcelData> list = ExcelImportUtil.importExcel(file.getInputStream(), ExcelData.class, params);
ExcelDataInBO bo = taskService.excelDataIn(batchId, list);
return ApiResult.success(bo.copyProperties2(ExcelDataInVO.class));
}
这里需要注意的是ExcelData这个对象,和ExcelImportUyil.importExcel方法
点开这个对象可以看到
有个注解为Excel,里面的值为中文,对应的是Excel模版中的第一列的中文名,这样就可以做到解析的效。
第二个注意点是
params.setTitleRows(0);
方法中的0对应的是从数字的下一行开始读取数据
为 0 则是从 Excel中的第 2 行开始读取
为 1 则是从Excel中的第 3 行开始读取