目录
[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 文件)
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 直接下载
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);
}
}
}
运行后则会将表中的数据打印到控制台!!!