使用Apache POI 创建和读取excel表

目录

[1. Apache POI 中文使用手册](#1. Apache POI 中文使用手册)

[1.1 Apache POI 项目介绍](#1.1 Apache POI 项目介绍)

[1.2 处理组件](#1.2 处理组件)

[1.2.1 Excel 文件处理组件](#1.2.1 Excel 文件处理组件)

[1.2.2 Word 文件处理组件](#1.2.2 Word 文件处理组件)

[1.2.3 PPT 文件处理组件](#1.2.3 PPT 文件处理组件)

[1.2.4 文档属性组件](#1.2.4 文档属性组件)

[1.2.5 Visio 文件处理组件](#1.2.5 Visio 文件处理组件)

[1.2.6 Microsoft Publisher 98(-2007)文件处理组件](#1.2.6 Microsoft Publisher 98(-2007)文件处理组件)

[1.2.7 OutLook 文件处理组件](#1.2.7 OutLook 文件处理组件)

[1.2.8 OutLook 附件文件处理组件](#1.2.8 OutLook 附件文件处理组件)

[1.3 Apache POI 下载](#1.3 Apache POI 下载)

[1.3.1 直接下载](#1.3.1 直接下载)

[1.3.2 Maven依赖下载](#1.3.2 Maven依赖下载)

[1.4 使用Apache POI](#1.4 使用Apache POI)

[1.4.1 使用Apache POI 读写Excel 文件](#1.4.1 使用Apache POI 读写Excel 文件)

2、测试:创建excel表

读取excel表格


1. Apache POI 中文使用手册

1.1 Apache POI 项目介绍

  • Apache POI项目的任务是创建和维护Java API,以基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)处理各种文件格式。

  • 简而言之,您可以使用Java读写MS Excel文件。

  • 此外,您可以使用Java读写MS Word和MS PowerPoint文件。

  • Apache POI是您的Java Excel解决方案(适用于Excel 97-2008)

  • Apache POI项目是用于基于Microsoft的OLE 2复合文档格式开发文件格式的纯Java端口的主项目

  • Apache POI还是用于基于Office Open XML(ooxml)开发文件格式的纯Java端口的主项目

简言之, Apache POI是Java 领域中可以操作World,Excel,PPT文件的类库,可以用于生成报表,数据处理等.

值得注意的是,Apache POI 从4.0.1版本开始,需要JDK 8 或更高版本支持。

1.2 处理组件

1.2.1 Excel 文件处理组件

|-------------------------------------------|------------|--------------|---------------|
| POIFS | HSSF | XSSF | SXSSF |
| OIFS是POI中最古老,最稳定的部分。OLE 2复合文档格式到纯Java的移植。 | 读写*.xls文件 | 读写*.xlsx 文件 | 读写*.xlsx 大文件 |

1.2.2 Word 文件处理组件

|------------|--------------|
| HWPF | XWPF |
| 处理*.doc文件 | 处理*.docx 文件 |

1.2.3 PPT 文件处理组件

|------------|--------------|
| HSLF | XSLF |
| 处理*.ppt文件 | 处理*.pptx 文件 |

1.2.4 文档属性组件
  • HPSF是OLE 2属性集格式到纯Java的移植。

  • 属性集通常用于存储文档的属性(标题,作者,最后修改日期等),但是它们也可以用于特定于应用程序的目的。

  • HPSF支持读取和写入属性。

1.2.5 Visio 文件处理组件

|-------------|-------------|
| HDGF | XDGF |
| 处理*.vsd 文件 | 处理*.vsdx文件 |

1.2.6 Microsoft Publisher 98(-2007)文件处理组件
  • HPBF是我们将Microsoft Publisher 98(-2007)文件格式移植到纯Java的端口。

  • 目前,它仅支持低水平读取大约一半的文件部分,并支持简单的文本提取

1.2.7 OutLook 文件处理组件
  • SMF是Microsoft Outlook消息文件格式到纯Java的移植。目前,它仅包含MSG文件的某些文本内容以及一些附件。进一步的支持和文档进展缓慢

  • Microsoft最近在其OSP中添加了Outlook文件格式

1.2.8 OutLook 附件文件处理组件
  • HMEF是Microsoft TNEF(传输中性编码格式)文件格式到纯Java的移植。Outlook有时会使用TNEF对消息进行编码,通常会以winmail.dat的形式出现。HMEF当前仅支持较低级别的阅读,但我们希望添加文本和附件提取。

  • 处理winmail.dat 格式文件

1.3 Apache POI 下载

依赖引用关系图如下所示:

1.3.1 直接下载

点击下载Apache POI

1.3.2 Maven依赖下载
java 复制代码
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> 
<dependency> 
<groupId>org.apache.poi</groupId> 
<artifactId>poi</artifactId> 
<version>5.0.0</version> 
</dependency> 
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> 
<dependency> 
<groupId>org.apache.poi</groupId> 
<artifactId>poi-ooxml</artifactId> 
<version>5.0.0</version> 
</dependency>

点击查看最新版

1.4 使用Apache POI

Apache POI 虽然支持很多种文档格式的读写,但是我们最常用的还是对Excel 文件的读写。

1.4.1 使用Apache POI 读写Excel 文件

正如前面所说,Apache POI 针对读写Excel 文件提供了三个组件:

|-----------------------------------------|-------------------------------------------------|----------------------------------------------|
| HSSF | XSSF | SXSSF |
| HSSF是POI项目对Excel '97(-2007)文件格式的纯Java实现 | XSSF是POI项目对Excel 2007 OOXML(.xlsx)文件格式的纯Java实现。 | SXSSF是XSSF的API兼容流扩展,可用于必须生成非常大的电子表格且堆空间有限的情况 |
| 处理 *.xls 文件 | 处理 *.xlsx 文件 | 处理超大的 *xlsx 文件 |

  • 生成电子表格的另一种方法是通过Cocoon序列化器(但是您仍将间接使用HSSF)。使用Cocoon,您可以通过简单地应用样式表并指定序列化程序来序列化任何XML数据源(例如,可能是在SQL中输出的ESQL页面)。

  • 3.8-beta3 开始,POI提供了基于XSSF的低内存占用的SXSSF API。

  • SXSSF是XSSF的API兼容流扩展,可用于必须生成非常大的电子表格且堆空间有限的情况。SXSSF通过限制对滑动窗口内的行的访问来实现其低内存占用,而XSSF允许对文档中的所有行进行访问。不再存在于窗口中的较旧的行由于被写入磁盘而变得不可访问.

  • 在自动刷新模式下,可以指定访问窗口的大小,以在内存中保留一定数量的行。当达到该值时,创建额外的一行会导致索引最低的行从访问窗口中删除并写入磁盘。或者,可以将窗口大小设置为动态增长。可以根据需要通过显式调用flushRows(int keepRows)定期对其进行修剪。

  • 由于实现的流性质,与XSSF相比存在以下限制:

    • 在某个时间点只能访问有限数量的行。

    • 不支持 Sheet.clone()

    • 不支持公式评估

2、测试:创建excel表

java 复制代码
/*
 * Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.
 *
 */
package cn.fpl;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * <p>Project: ICan_ParentWork - WriteExcelTest</p>
 * <p>Powered by fpl1116 On 2024-01-24 16:30:12</p>
 * <p>描述:<p>
 *
 * @author penglei
 * @version 1.0
 * @since 1.8
 */
public class WriteExcelTest {
	public static void main(String[] args) throws IOException {
		// 创建workbook
		HSSFWorkbook workbook = new HSSFWorkbook();
		// 	创建sheet
		HSSFSheet sheet = workbook.createSheet("元神");
		// 	创建row
		HSSFRow row = sheet.createRow(0);
		// 	创建单元格并赋值
		row.createCell(0).setCellValue("姓名");
		row.createCell(1).setCellValue("年龄");
		for (int i = 1; i <=5 ; i++) {
			HSSFRow row1 = sheet.createRow(i);
			row1.createCell(0).setCellValue(i+"号角色");
			row1.createCell(1).setCellValue(18+i);
		}
		// 	输出excel
		workbook.write(new FileOutputStream("D:\\Users\\penglei\\Desktop\\元神.xls"));

	}

}

运行后则会在D:\\Users\\penglei\\Desktop\\元神.xls这个路径下产生一个元神.xls表格

读取excel表格

java 复制代码
/*
 * Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.
 *
 */
package cn.fpl;

/**
 * <p>Project: ICan_ParentWork - SS</p>
 * <p>Powered by fpl1116 On 2024-01-24 16:44:28</p>
 * <p>描述:<p>
 *
 * @author penglei
 * @version 1.0
 * @since 1.8
 */


import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;

public class ReadExcelTest {
    public static void main(String[] args) throws IOException {
        //获得workboot
        HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("D:\\Users\\penglei\\Desktop\\元神.xls"));
        //获得sheet
        HSSFSheet sheet = workbook.getSheet("元神");
        //获得row
        for (int i = 1; i < sheet.getLastRowNum(); i++) {
            HSSFRow row = sheet.getRow(i);
            //获得cell并取值
            String name = row.getCell(0).getStringCellValue();
            double age = row.getCell(1).getNumericCellValue();
            System.out.println(name+"-------------------"+age);
        }
    }
}

运行后则会将表中的数据打印到控制台!!!

相关推荐
qq_441996052 分钟前
Mybatis官方生成器使用示例
java·mybatis
Qter_Sean3 分钟前
自己动手写Qt Creator插件
开发语言·qt
何曾参静谧8 分钟前
「QT」文件类 之 QIODevice 输入输出设备类
开发语言·qt
巨大八爪鱼8 分钟前
XP系统下用mod_jk 1.2.40整合apache2.2.16和tomcat 6.0.29,让apache可以同时访问php和jsp页面
java·tomcat·apache·mod_jk
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
计算机-秋大田2 小时前
基于微信小程序的养老院管理系统的设计与实现,LW+源码+讲解
java·spring boot·微信小程序·小程序·vue
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
冰芒猓4 小时前
SpringMVC数据校验、数据格式化处理、国际化设置
开发语言·maven