zoukankan      html  css  js  c++  java
  • SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」

    摘自:https://www.cnblogs.com/bingyang-py/p/12407675.html

    SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」

     

    有天上飞的概念,就要有落地的实现

    • 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍

    • 先赞后看,养成习惯

    SpringBoot 图文教程系列文章目录

    1. SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」
    2. SpringBoot图文教程2—日志的使用「logback」「log4j」
    3. SpringBoot图文教程3—「‘初恋’情结」集成Jsp
    4. SpringBoot图文教程4—SpringBoot 实现文件上传下载
    5. SpringBoot图文教程5—SpringBoot 中使用Aop
    6. SpringBoot图文教程6—SpringBoot中过滤器的使用
    7. SpringBoot图文教程7—SpringBoot拦截器的使用姿势这都有
    8. SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」

    前言

    Excel文件的导入导出功能,在项目中可以说是一个极其常见的功能了,使用到这技术的业务场景也非常多,例如:客户信息的导入导出,运营数据的导入导出,订单数据的导入导出等等。

    那么在 SpringBoot 中如何使用 Poi 呢?从本文开始将会说三种使用 Poi 的姿势:Apache Poi,EasyPoi,阿里开源的EasyExcel。

    话不多说,马上开始。

    集成 Poi

    什么是 Poi

    Apache Poi 是 Apache 的一个开源项目,用Java代码通过 poi 技术可以实现 读取 和 生成 Excel 文档。

    关于 Poi 的简介非常的少,接下来我们简单说一些和Excel相关的常识

    1. 通过 office Excel软件或者 wps 常用的Excel格式有两种:xls 和 xlsx

    2. 上图中的两个文件都是Excel文件,在一个Excel文件中包含若干张表

    3. 一张表中可以分为很多行 row ,每行又分为很多单元格 cell

    Poi 对 Excel 抽象出来的对象

    刚才简单的说过了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

    Poi 的基本使用

    要导出的实体类 如下:
    image.png

    1. 在项目中导入依赖

     <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>

    2. 在测试类中写导出的代码如下:

    
        /**
         * 导出数据
         */
        @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文件如下

    3. 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实战开发经验。

     
     
  • 相关阅读:
    1.4.2.3. SETUP(Core Data 应用程序实践指南)
    1.4.2.2. PATHS(Core Data 应用程序实践指南)
    1.4.2.1. FILES(Core Data 应用程序实践指南)
    1.4.2. 实现 Core Data Helper 类(Core Data 应用程序实践指南)
    1.4.1. Core Data Helper 简介(Core Data 应用程序实践指南)
    1.4. 为现有的应用程序添加 Core Data 支持(Core Data 应用程序实践指南)
    1.3.2. App Icon 和 Launch Image(Core Data 应用程序实践指南)
    1.3.1. 新建Xcode项目并设置故事板(Core Data 应用程序实践指南)
    php验证邮箱是否合法
    如何使js函数异步执行
  • 原文地址:https://www.cnblogs.com/xichji/p/12409113.html
Copyright © 2011-2022 走看看