有天上飛的概念,就要有落地的實現web
概念十遍不如代碼一遍,朋友,但願你把文中全部的代碼案例都敲一遍面試
先贊後看,養成習慣數據庫
SpringBoot 圖文教程系列文章目錄apache
Excel文件的導入導出功能,在項目中能夠說是一個極其常見的功能了,使用到這技術的業務場景也很是多,例如:客戶信息的導入導出,運營數據的導入導出,訂單數據的導入導出等等。app
那麼在 SpringBoot 中如何使用 Poi 呢?從本文開始將會說三種使用 Poi 的姿式:Apache Poi,EasyPoi,阿里開源的EasyExcel。 學習
話很少說,立刻開始。測試
Apache Poi 是 Apache 的一個開源項目,用Java代碼經過 poi 技術能夠實現 讀取 和 生成 Excel 文檔。字體
關於 Poi 的簡介很是的少,接下來咱們簡單說一些和Excel相關的常識spa
經過 office Excel軟件或者 wps 經常使用的Excel格式有兩種:xls 和 xlsx
3d![]()
上圖中的兩個文件都是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 |
要導出的實體類 以下:
![]()
image.png
<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實戰開發經驗。