Apache POI 操作Excel簡單入門使用
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再執行就好了