🎉SpringBoot整合EasyExcel实现复杂Excel表格的导入&导出功能
- ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
- ✨博客主页:IT·陈寒的博客
- 🎈该系列文章专栏:架构设计
- 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
- 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
- 📜 欢迎大家关注! ❤️
引言
在实际的软件开发中,数据的导入和导出是非常常见的需求,特别是对于复杂的Excel表格,常规的处理方式可能显得繁琐而效率低下。SpringBoot作为一种现代化的Java开发框架,EasyExcel则是一款优秀的Excel操作工具,两者的结合可以大大简化开发过程,提高效率。本文将介绍如何使用SpringBoot整合EasyExcel来实现复杂Excel表格的导入和导出功能。
一、环境准备
在开始之前,请确保你的开发环境中已经准备好了以下工具和库:
- JDK 8及以上版本
- Maven
- SpringBoot
- EasyExcel
你可以通过Maven引入EasyExcel的依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
</dependency>
二、导入Excel数据
首先,我们将重点介绍如何使用SpringBoot整合EasyExcel来实现复杂Excel表格的导入功能。
1. 创建实体类
假设我们要导入的Excel表格数据如下:
姓名 | 年龄 | 地址 | 电话 |
---|---|---|---|
张三 | 25 | 北京市朝阳区 | 13888888888 |
李四 | 30 | 上海市浦东区 | 13999999999 |
王五 | 28 | 广州市天河区 | 13666666666 |
我们需要创建一个对应的Java实体类,例如:
public class User {
private String name;
private Integer age;
private String address;
private String phone;
// 省略getter和setter方法
}
2. 编写Excel导入的Controller
@RestController
@RequestMapping("/excel")
public class ExcelController {
@PostMapping("/import")
public String importExcel(@RequestParam("file") MultipartFile file) {
try {
List<User> userList = EasyExcel.read(file.getInputStream(), User.class, new UserDataListener()).sheet().doReadSync();
// 处理导入的数据,可以保存到数据库或进行其他操作
// ...
return "导入成功";
} catch (Exception e) {
e.printStackTrace();
return "导入失败:" + e.getMessage();
}
}
}
在上面的例子中,UserDataListener
是一个实现了AnalysisEventListener
接口的监听器,用于监听Excel数据的读取过程。
public class UserDataListener extends AnalysisEventListener<User> {
private List<User> userList = new ArrayList<>();
@Override
public void invoke(User user, AnalysisContext context) {
userList.add(user);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 数据读取完毕后的操作,可以在这里对数据进行进一步处理
// ...
}
}
3. 编写前端页面
在前端页面中,我们需要一个文件上传的表单,例如使用HTML的<form>
标签和<input type="file">
标签:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Excel导入</title>
</head>
<body>
<form action="/excel/import" method="post" enctype="multipart/form-data">
<input type="file" name="file" accept=".xlsx, .xls">
<button type="submit">导入Excel</button>
</form>
</body>
</html>
4. 启动SpringBoot应用
通过以上步骤,我们已经完成了Excel导入功能的开发。启动SpringBoot应用,并访问前端页面,选择要导入的Excel文件,点击导入按钮即可完成数据导入。
三、导出Excel数据
下面,我们将介绍如何使用SpringBoot整合EasyExcel来实现复杂Excel表格的导出功能。
1. 编写导出的Controller
@RestController
@RequestMapping("/excel")
public class ExcelController {
@Autowired
private ExcelService excelService;
@GetMapping("/export")
public void exportExcel(HttpServletResponse response) {
try {
excelService.exportExcel(response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 编写导出的Service
@Service
public class ExcelService {
public void exportExcel(HttpServletResponse response) throws IOException {
// 查询数据库或其他数据源获取导出的数据
List<User> userList = getUserList();
// 设置响应头
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=user.xlsx");
// 导出Excel
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), User.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("用户信息").build();
excelWriter.write(userList, writeSheet);
excelWriter.finish();
}
private List<User> getUserList() {
// 模拟从数据库中获取用户数据
List<User> userList = new ArrayList<>();
userList.add(new User("张三", 25, "北京市朝阳区", "13888888888"));
userList.add(new User("李四", 30, "上海市浦东区", "13999999999"));
userList.add(new User("王五", 28, "广州市天河区", "13666666666"));
return userList;
}
}
3. 编写前端页面
在前端页面中,我们可以提供一个导出按钮,通过点击按钮触发导出操作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Excel导出</title>
</head>
<body>
<a href="/excel/export" target="_blank">导出Excel</a>
</body>
</html>
4. 启动SpringBoot应用
通过以上步骤,我们已经完成了Excel导出功能的开发。启动SpringBoot应用,并访问前端页面,点击导出按钮即可下载导出的Excel文件。
拓展
- 异常处理:在实际项目中,需要对异常进行合理的处理。可以通过在Controller中捕获异常,并返回友好的提示信息,提高用户体验。
- 模板导出:有时候,我们需要按照一定的模板导出Excel文件,EasyExcel也提供了相关的API来支持模板导出。
- 大数据量处理:当需要处理大量数据时,可以考虑使用EasyExcel的分段读取和分段写入功能,以减轻内存压力。
总结
通过本文的介绍,我们学习了如何使用SpringBoot整合EasyExcel来实现复杂Excel表格的导入和导出功能。EasyExcel提供了简洁易用的API,使得开发者可以轻松地完成Excel操作,提高了开发效率。在实际项目中,可以根据需求进一步定制导入导出的逻辑,满足不同场景的要求。希望本文对你在Excel操作方面的开发提供了帮助。