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實戰開發經驗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM