基于SpringBoot+POI实现的excel导入导出(适配版)(前言)

介绍

项目中使用到了excel做导入和导出,网上查询了一些资料,没有找到一些合适的或者完成的,于是乎,利用空闲时间开发出一套完整的excel导入导出。
整个功能将会在本文发布后的八期内容里完成更新。会将导入导出的核心代码贴出来供大家参考,有些不足的地方,可供大家共同探讨优化。
因整体更新时间较长,内部部分代码比较陈旧。近期正在对内部功能代码进行优化升级。优化后的代码会以github等方式公开。

导入功能说明

目前最新的版本中导入支持以下功能:
1.可以生成自定义数据模板
2.可以生成带下拉数据格式模板(固定数据使用)
3.定义导入样式
4.自定义导入数据处理接收参数对象
5.多对象接收数据转换
6.固定数据,字典等格式数据翻译
7.参数转数据库主键翻译
8.自定义读取sheet
9.多线程读取excel数据(待实现)
10.通过注解方式自定义导入表头,表头排序
11.支持本功能导出的数据不做操作直接导入

导入操作流程

在这里插入图片描述

导出功能说明

1.支持导出自定义表头,表格样式
2.支持数据字典翻译
3.支持自定义数据合计计算
4.支持金额格式转换(千位分隔)
5.多线程导出(待实现)
6.支持导出复杂类型表头(目前仅支持二级合并表头)
7.支持自定义单元格合并

导出执行流程

在这里插入图片描述

导出即导入

导入即导入说明
导出的数据可以在不做任何修改的情况下即可导入到数据库中

在这里插入图片描述

工具性能测试结果展示

单sheet条数内存开始(GB)内存结束(GB)消耗(MB)时间(毫秒)备注
500005.516.2676819402无死机
100005.486.1265528905无死机
50005.526.0453239821无死机
20005.385.9049185137无死机
10005.505.904091335175无死机
5005.645.8723525652无死机

数据说明

  1. 以上表格数据表示使用该工具后大数据量分段写数据的性能
  2. 内存和时间的消耗均包含数据查询时间和写数据到数据库时间
  3. 数据复杂程度:中等
  4. 测试数据总条数:231064
  5. 测试结果跟使用的环境有一定关系:本人测试使用的环境是win7+8G运行,jdk1.8
  6. 使用单线程测试
  7. 后期还会优化多线程版本,敬请期待

写在最后

本文对导入和导出的整体功能做了个简单的说明,本期后的八期内容将分开对以上内容的核心代码进行分析,主要内容分布如下:

1. POI和HSSFWorkbook介绍(9.5)
2. 导入实现的基本逻辑代码分析(9.12)
3. 导入生成文件固定数据代码分析(9.19)
4.导入数据对象接收数据处理(9.26)
5.导出写数据基本逻辑代码分析(10.10)
6.导出动态处理计算和格式逻辑代码分析(10.17)
7.自定义表头方式(10.24)
8.导入导出生成文件流返回(10.31)

自本文发布日期起开始更新,每周更新一期,每周日晚更新,欢迎围观。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现Excel导入导出,需要用到POI库。下面介绍一下使用SpringBoot集成MyBatis和POI实现Excel导入导出的步骤。 1. 引入依赖 在pom.xml文件中添加以下依赖: ``` <!-- SpringBoot MyBatis 依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!-- POI 依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> ``` 2. 创建实体类 创建一个实体类,用于映射Excel文件中的数据。 ```java public class User { private Integer id; private String name; private String email; private String phone; // 省略 getter 和 setter 方法 } ``` 3. 创建Mapper 创建一个Mapper,用于操作数据库。 ```java @Mapper public interface UserMapper { List<User> findAll(); void insert(User user); void batchInsert(List<User> userList); } ``` 4. 创建Service 创建一个Service,用于导入导出Excel文件。 ```java @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> findAll() { return userMapper.findAll(); } public void insert(User user) { userMapper.insert(user); } public void batchInsert(MultipartFile file) throws IOException { List<User> userList = readExcel(file); userMapper.batchInsert(userList); } public void exportExcel(HttpServletResponse response) throws IOException { List<User> userList = userMapper.findAll(); writeExcel(response, userList); } private List<User> readExcel(MultipartFile file) throws IOException { List<User> userList = new ArrayList<>(); Workbook workbook = WorkbookFactory.create(file.getInputStream()); Sheet sheet = workbook.getSheetAt(0); for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); User user = new User(); user.setName(row.getCell(0).getStringCellValue()); user.setEmail(row.getCell(1).getStringCellValue()); user.setPhone(row.getCell(2).getStringCellValue()); userList.add(user); } return userList; } private void writeExcel(HttpServletResponse response, List<User> userList) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Users"); Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Name"); headerRow.createCell(1).setCellValue("Email"); headerRow.createCell(2).setCellValue("Phone"); for (int i = 0; i < userList.size(); i++) { Row row = sheet.createRow(i + 1); User user = userList.get(i); row.createCell(0).setCellValue(user.getName()); row.createCell(1).setCellValue(user.getEmail()); row.createCell(2).setCellValue(user.getPhone()); } response.setHeader("Content-Disposition", "attachment; filename=users.xlsx"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); workbook.write(response.getOutputStream()); } } ``` 5. 创建Controller 创建一个Controller,用于接收导入导出Excel文件的请求。 ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public List<User> findAll() { return userService.findAll(); } @PostMapping("/users") public void insert(@RequestBody User user) { userService.insert(user); } @PostMapping("/users/import") public void batchInsert(@RequestParam("file") MultipartFile file) throws IOException { userService.batchInsert(file); } @GetMapping("/users/export") public void exportExcel(HttpServletResponse response) throws IOException { userService.exportExcel(response); } } ``` 至此,就完成了SpringBoot集成MyBatis和POI实现Excel导入导出的步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值