一. 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();
}
}
}
输出结果: