SpringBoot圖文教程9—SpringBoot 匯入匯出 Excel 「Apache Poi」
有天上飛的概念,就要有落地的實現
概念十遍不如程式碼一遍,朋友,希望你把文中所有的程式碼案例都敲一遍
先贊後看,養成習慣
SpringBoot 圖文教程系列文章目錄
- SpringBoot圖文教程1「概念+案例 思維導圖」「基礎篇上」
- SpringBoot圖文教程2—日誌的使用「logback」「log4j」
- SpringBoot圖文教程3—「‘初戀’情結」整合Jsp
- SpringBoot圖文教程4—SpringBoot 實現檔案上傳下載
- SpringBoot圖文教程5—SpringBoot 中使用Aop
- SpringBoot圖文教程6—SpringBoot中過濾器的使用
- SpringBoot圖文教程7—SpringBoot攔截器的使用姿勢這都有
- SpringBoot圖文教程8 — SpringBoot整合MBG「程式碼生成器」
前言
Excel檔案的匯入匯出功能,在專案中可以說是一個極其常見的功能了,使用到這技術的業務場景也非常多,例如:客戶資訊的匯入匯出,運營資料的匯入匯出,訂單資料的匯入匯出等等。
那麼在 SpringBoot 中如何使用 Poi 呢?從本文開始將會說三種使用 Poi 的姿勢:Apache Poi,EasyPoi,阿里開源的EasyExcel。
話不多說,馬上開始。
整合 Poi
什麼是 Poi
Apache Poi 是 Apache 的一個開源專案,用Java程式碼通過 poi 技術可以實現 讀取 和 生成 Excel 文件。
關於 Poi 的簡介非常的少,接下來我們簡單說一些和Excel相關的常識
通過 office Excel軟體或者 wps 常用的Excel格式有兩種:xls 和 xlsx
上圖中的兩個檔案都是Excel檔案,在一個Excel檔案中包含若干張表
一張表中可以分為很多行 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 的基本使用
要匯出的實體類 如下:
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實戰開發經驗。