天天看点

Java读取Excel数据-基于Apache POI

一. 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

    下载解压后,得到下面文件:

    Java读取Excel数据-基于Apache POI
    把图中的jar文件导入到自己的项目中,就可以使用POI,用Java读Excel表格数据了。

> 注意:导入项目时,在项目中新创建以lib包用于存放jar包,将jar包导入后,进行如下操作,将jar包导入到项目中去

Java读取Excel数据-基于Apache POI
  • 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();
		}

	}

}

           

输出结果:

Java读取Excel数据-基于Apache POI