一. POI是什麼
Apache POI - the Java API for Microsoft Documents,顧名思義,Apache的第三方包,用來操作微軟office文檔,我們以excel來說明。
二、需要的jar包
- 首先需要到Apache官網下載下傳POI的庫,下載下傳連結位址:https://poi.apache.org/download.html
-
進入我的百度網盤進行下載下傳,下載下傳連結:連結:https://pan.baidu.com/s/1hokZyOm4cztVtY4tb_6w5g
提取碼:9sfy
下載下傳解壓後,得到下面檔案:
把圖中的jar檔案導入到自己的項目中,就可以使用POI,用Java讀Excel表格資料了。Java讀取Excel資料-基于Apache POI
> 注意:導入項目時,在項目中新建立以lib包用于存放jar包,将jar包導入後,進行如下操作,将jar包導入到項目中去
- POI的元件清單中,針對excel的主要是HSSF和XSSF元件,前者針對97-2007的通用版excel,即字尾xls;後者針對2007或更高版的excel,即字尾xlsx。官方概要如下:
HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format.
XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format.
三.POI核心類
3.1 工具簿WorkBook
建立或維護Excel工作簿的所有類的超接口,Workbook,屬于org.apache.poi.ss.usermodel包。其下有兩個實作類:
- HSSFWorkbook : 有讀取.xls 格式和寫入Microsoft Excel檔案的方法。它與微軟Office97-2003版本相容
- XSSFWorkbook : 有讀寫Microsoft Excel和OpenOffice的XML檔案的格式.xls或.xlsx的方法。它與MS-Office版本2007或更高版本相容
是以在針對不同版本的excel時,需要對應以上使用不同的Workbook。構造函數中,常用的:
- HSSFWorkbook
//直接建立新的
HSSFWorkbook()
//通過輸入流建立
HSSFWorkbook(java.io.InputStream s)
- XSSFWorkbook
//直接建立新的
HSSFWorkbook()
//通過輸入流建立
HSSFWorkbook(java.io.InputStream s)
//通過File類建立
HSSFWorkbook(java.io.File file)
3.2 标簽頁Sheet
HSSFSheet 和 XSSFSheet 都是Sheet接口的實作類,Sheet可以使用Workbook的兩個方法獲得:
workbook.createSheet();
workbook.createSheet(String sheetName);
3.3 行 Row
同理,Row是 HSSFRow 和 XSSFRow 的接口,通過Sheet擷取:
3.4 單元格 Cell
同理,Cell是 HSSFCell 和 XSSFCell 的接口,通過Row擷取:
row.createCell(int column);
row.createCell(int column, int type);
有了以上基礎,我們就可以對表格進行操作
package com.apesource.demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Demo {
public static void main(String[] args) {
String path="C:\\Users\\ASUS\\Desktop\\data.xlsx";
try {
//接口
Workbook workbook=null;
//1.Workbook:電子表格文檔對象
//根據字尾名,建立不同的workbook接口實作類對象
if(path.endsWith(".xlsx")) {
//新版Excel
workbook=new XSSFWorkbook(path);
}else {
//舊版Excel
workbook=new HSSFWorkbook(new FileInputStream(path));
}
//2.Sheet:文檔中的某個電子表
//擷取第一個Sheet
Sheet sheet=workbook.getSheetAt(0);
for(int i=1;i<sheet.getLastRowNum();i++) {
//3.Row:電子表中的某行資料(第i行)
Row row=sheet.getRow(i);
String id=row.getCell(0).toString();
String name=row.getCell(1).toString();
String address=row.getCell(2).toString();
//4.Cell:資料行中的某個的單元格
System.out.println("序号:"+id);
System.out.println("姓名:"+name);
System.out.println("位址:"+address);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
輸出結果: