stoneechogx 2020-03-04
摘自:https://www.cnblogs.com/bingyang-py/p/12407675.html
有天上飞的概念,就要有落地的实现
概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍
先赞后看,养成习惯
SpringBoot 图文教程系列文章目录
Excel文件的导入导出功能,在项目中可以说是一个极其常见的功能了,使用到这技术的业务场景也非常多,例如:客户信息的导入导出,运营数据的导入导出,订单数据的导入导出等等。
那么在 SpringBoot 中如何使用 Poi 呢?从本文开始将会说三种使用 Poi 的姿势:Apache Poi,EasyPoi,阿里开源的EasyExcel。
话不多说,马上开始。
Apache Poi 是 Apache 的一个开源项目,用Java代码通过 poi 技术可以实现 读取 和 生成 Excel 文档。
关于 Poi 的简介非常的少,接下来我们简单说一些和Excel相关的常识
通过 office Excel软件或者 wps 常用的Excel格式有两种:xls 和 xlsx
上图中的两个文件都是Excel文件,在一个Excel文件中包含若干张表
一张表中可以分为很多行 row ,每行又分为很多单元格 cell
刚才简单的说过了Excel文件相关的情况,但是那是在电脑中使用Excel需要用到的东西,如果要通过 SpringBoot 导入导入 Excel 文件,就要通过类和方法来进行。
于是在 Poi 中对以上提到的所有的名词都做了一定的封装。对应关系如下:
Excel中的概念 | Poi对应的对象 |
---|---|
Excel 文件 | HSSFWorkbook (xls)XSSFWorkbook(xlsx) |
Excel 的工作表 | HSSFSheet |
Excel 的行 | HSSFRow |
Excel 中的单元格 | HSSFCell |
Excel 字体 | HSSFFont |
Excel 单元格样式 | HSSFCellStyle |
Excel 颜色 | HSSFColor |
合并单元格 | CellRangeAddress |
要导出的实体类 如下:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.14</version> </dependency>
/** * 导出数据 */ @Test public void test2() throws IOException { // 0.准备数据 User user = new User(); user.setUserId(1); user.setUserName("hhhh"); user.setUserSex("男"); String[] titles = {"编号","名字","性别"}; /** * 先写入 标题栏数据 */ // 1.创建文件对象 创建HSSFWorkbook只能够写出为xls格式的Excel // 要写出 xlsx 需要创建为 XSSFWorkbook 两种Api基本使用方式一样 HSSFWorkbook workbook = new HSSFWorkbook(); // 2.创建表对象 HSSFSheet sheet = workbook.createSheet("users"); // 3.创建标题栏(第一行) 参数为行下标 行下标从0开始 HSSFRow titleRow = sheet.createRow(0); // 4.在标题栏中写入数据 for (int i = 0; i < titles.length; i++) { // 创建单元格 HSSFCell cell = titleRow.createCell(i); cell.setCellValue(titles[i]); } /** * 写入用户数据 */ // 5 创建行 如果是用户数据的集合 需要遍历 HSSFRow row = sheet.createRow(1); // 6 将用户数据写入到行中 row.createCell(0).setCellValue(user.getUserId()); row.createCell(1).setCellValue(user.getUserName()); row.createCell(2).setCellValue(user.getUserSex()); // 文件保存到本地 参数为要写出的位置 workbook.write(new FileOutputStream("/Users/k/Desktop/hhh.xls")); }
生成的Excel文件如下
/** * 文件导入 实际上就是文件导出反向操作 */ @Test public void test3() throws Exception { // 1.通过流读取Excel文件 FileInputStream inputStream = new FileInputStream("/Users/k/Desktop/hhh.xls"); // 2.通过poi解析流 HSSFWorkbook 处理流得到的对象中 就封装了Excel文件所有的数据 HSSFWorkbook workbook = new HSSFWorkbook(inputStream); // 3.从文件中获取表对象 getSheetAt通过下标获取 HSSFSheet sheet = workbook.getSheetAt(0); // 4.从表中获取到行数据 从第二行开始 到 最后一行 getLastRowNum() 获取最后一行的下标 int lastRowNum = sheet.getLastRowNum(); for (int i = 1; i <= lastRowNum; i++) { // 通过下标获取行 HSSFRow row = sheet.getRow(i); // 从行中获取数据 /** * getNumericCellValue() 获取数字 * getStringCellValue 获取String */ double id = row.getCell(0).getNumericCellValue(); String name = row.getCell(1).getStringCellValue(); String sex = row.getCell(2).getStringCellValue(); // 封装到对象中 User user = new User(); user.setUserId((int) id); user.setUserName(name); user.setUserSex(sex); // 将对象添加数据库 System.out.println(user); } }
Tips:本文只讲解了 Poi 最基本的使用方式 如果需要其他更加全面的使用方式
可以关注后续文章 Easypoi 和 EasyExcel 以及 Poi中文 API 文档 「40种操作 Excel文件的姿势」
恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。
让我们再次回顾本文的学习目标
- 掌握SpringBoot中Poi的使用
要掌握SpringBoot更多的用法,请持续关注本系列教程。
欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。