Apache POI簡介
開發中經常會涉及到excel的處理,如導出Excel,導入Excel到數據庫中,操作Excel目前有兩個框架,一個是apache 的poi, 另一個是 Java Excel
Apache POI 是用Java編寫的免費開源的跨平台的 Java API,Apache POI提供API給Java程式對Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式檔案讀和寫的功能。
官方主頁: http://poi.apache.org/index.html
API文檔: http://poi.apache.org/apidocs/index.html
創建一個put普通的maven項目

導入相關依賴坐標
<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>
常用的類(POI結構)
HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能
XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能
HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能
HDGF - 提供讀Microsoft Visio格式檔案的功能
HPBF - 提供讀Microsoft Publisher格式檔案的功能
HSMF - 提供讀Microsoft Outlook格式檔案的功能
注意:使用wps的同學也可以使用poi
下面來寫兩個案例吧
1. 從Excel文件讀取數據
POI操作Excel表格封裝了幾個核心對象:
XSSFWorkbook:工作簿
XSSFSheet:工作表
XSSFRow:行
XSSFCell:單元格
1:創建工作簿對象
// 1.創建工作簿對象,並指定操作的文件
XSSFWorkbook workbook = new XSSFWorkbook("H:\\temp\\goodstype.xlsx");

2:獲得工作表對象
// 2.獲取工作表對象,既可以根據工作表的順序獲取,也可以根據工作表的名稱獲取
XSSFSheet sheetAt = workbook.getSheetAt(0);

3:遍歷工作表對象 獲得行對象
// 3.遍歷工作表獲得行對象
for (Row row : sheetAt) {
}


4:遍歷行對象 獲得單元格(列)對象
// 4.遍歷行對象獲取單元格對象
for (Cell cell : row) {
// 獲取單元格數據
String cellValue = cell.getStringCellValue();
System.out.println("cellValue = " + cellValue);
}
5:獲得數據

注意:這里報了一個錯,原因是我的第一列是數值類型,當我們以getStringCellValue獲取時需要將該列改為文本類型

6:關閉
workbook.close();
還有一種方式獲取數據
//創建工作簿
XSSFWorkbook workbook = new XSSFWorkbook("H:\\temp\\goodstype.xlsx");
//獲取工作表,既可以根據工作表的順序獲取,也可以根據工作表的名稱獲取
XSSFSheet sheet = workbook.getSheetAt(0);
//獲取當前工作表最后一行的行號,行號從0開始
int lastRowNum = sheet.getLastRowNum();
for(int i=0;i<=lastRowNum;i++){
//根據行號獲取行對象
XSSFRow row = sheet.getRow(i);
// 再獲取單元格對象
short lastCellNum = row.getLastCellNum();
for(short j=0;j<lastCellNum;j++){
// 獲取單元格對象的值
String value = row.getCell(j).getStringCellValue();
System.out.println(value);
}
}
workbook.close();
2.向Excel文件寫入數據
package com.qbb.poi;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
/**
* @author QiuQiu&LL (個人博客:https://www.cnblogs.com/qbbit)
* @version 1.0
* @date 2022-03-17 10:37
* @Description:
*/
public class WriteExcel {
public static void main(String[] args) throws Exception {
// 1.創建工作簿對象
XSSFWorkbook workbook = new XSSFWorkbook();
// 2.創建工作表對象
XSSFSheet sheet = workbook.createSheet("qiuqiu");
// 3.創建行對象,0表示第一行
XSSFRow row = sheet.createRow(0);
// 設置頭部信息
row.createCell(0).setCellValue("ID");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("成績");
// 4.創建列(單元格)對象, 設置內容
XSSFRow row1 = sheet.createRow(0);
row1.createCell(0).setCellValue("1");
row1.createCell(1).setCellValue("qiuqiu");
row1.createCell(2).setCellValue(100);
XSSFRow row2 = sheet.createRow(0);
row2.createCell(0).setCellValue("2");
row2.createCell(1).setCellValue("ll");
row2.createCell(2).setCellValue("99");
// 5.通過輸出流將workbook對象下載到磁盤
FileOutputStream outputStream = new FileOutputStream("H:\\temp\\score.xlsx");
workbook.write(outputStream);
// 刷新
outputStream.flush();
outputStream.close();
workbook.close();
}
}

注意:當我們打開了當前excel時,再去寫將會報錯,已被占用;關閉excel再運行就好了
