- Apache POI Word Tutorial
- Apache POI Word - Home
- Apache POI Word - Overview
- Apache POI Word - Installation
- Apache POI Word - Core Classes
- Apache POI Word - Document
- Apache POI Word - Paragraph
- Apache POI Word - Borders
- Apache POI Word - Tables
- Apache POI Word - Font & Alignment
- Apache POI Word - Text Extraction
- Apache POI Word Resources
- Apache POI Word - Quick Guide
- Apache POI Word - Useful Resources
- Apache POI Word - Discussion
Apache POI Word - 快速指南
Apache POI Word - 概述
很多时候,需要软件应用程序来生成 Microsoft Word 文件格式的参考文档。有时,应用程序甚至需要接收 Word 文件作为输入数据。
任何想要生成 MS-Office 文件作为输出的 Java 程序员都必须使用预定义的只读 API 来执行此操作。
什么是 Apache POI?
Apache POI 是一种流行的 API,允许程序员使用 Java 程序创建、修改和显示 MS-Office 文件。它是由 Apache Software Foundation 开发和分发的一个开源库,用于使用 Java 程序设计或修改 MS-Office 文件。它包含将用户输入数据或文件解码为 MS-Office 文档的类和方法。
Apache POI 的组件
Apache POI 包含可处理 MS-Office 的所有 OLE2 复合文档的类和方法。该 API 的组件列表如下:
POIFS(不良混淆实现文件系统) - 该组件是所有其他 POI 元素的基本因素。它用于显式读取不同的文件。
HSSF(可怕的电子表格格式) - 用于读取和写入 MS-Excel 文件的 .xls 格式。
XSSF(XML 电子表格格式) - 用于 MS-Excel 的 .xlsx 文件格式。
HPSF(可怕的属性集格式) - 用于提取 MS-Office 文件的属性集。
HWPF(可怕的字处理器格式) - 用于读取和写入 MS-Word 的 .doc 扩展文件。
XWPF(XML 字处理器格式) - 用于读取和写入MS-Word 的.docx扩展文件。
HSLF(可怕的幻灯片布局格式) - 用于阅读、创建和编辑 PowerPoint 演示文稿。
HDGF(可怕的图表格式) - 它包含 MS-Visio 二进制文件的类和方法。
HPBF(Horrible PuBlisher 格式) - 用于读取和写入 MS-Publisher 文件。
本教程将指导您完成使用 Java 处理 MS-Word 文件的过程。因此,讨论仅限于 HWPF 和 XWPF 组件。
注意- POI 的旧版本支持二进制文件格式,例如 DOC、XLS、PPT 等。从版本 3.5 开始,POI 支持 MS-OFFICE 的 OOXML 文件格式,如 DOCX、XLSX、PPTX 等。
Apache POI Word - 安装
本章将带您完成在基于 Windows 和 Linux 的系统上设置 Apache POI 的过程。只需几个简单的步骤,即可轻松安装 Apache POI 并与您当前的 Java 环境集成,无需任何复杂的设置过程。安装时需要用户管理。
系统要求
JDK | Java SE 2 JDK 1.5 或更高版本 |
---|---|
记忆 | 1 GB RAM(推荐) |
磁盘空间 | 无最低要求 |
操作系统版本 | Windows XP或以上、Linux |
现在让我们继续执行安装 Apache POI 的步骤。
第 1 步:验证您的 Java 安装
首先,您需要在系统上安装 Java 软件开发工具包 (SDK)。要验证这一点,请根据您正在使用的平台执行这两个命令中的任意一个。
如果 Java 安装已正确完成,那么它将显示 Java 安装的当前版本和规范。下表给出了示例输出。
平台 | 命令 | 样本输出 |
---|---|---|
Windows |
打开命令控制台并输入 - \>java-版本 |
java 版本“11.0.11”2021-04-20 LTS Java(TM) SE 运行时环境 18.9(内部版本 11.0.11+9-LTS-194) Java HotSpot(TM) 64 位服务器 VM 18.9(内部版本 11.0.11+9-LTS-194,混合模式) |
Linux |
打开命令终端并输入 - $java-版本 |
java 版本“11.0.11”2021-04-20 LTS 打开JDK运行时环境18.9(内部版本11.0.11+9-LTS-194) 打开JDK 64位服务器VM(内部版本11.0.11+9-LTS-194,混合模式) |
我们假设本教程的读者已在其系统上安装了 Java SDK 版本 11.0.11。
如果您没有 Java SDK,请从www.oracle.com/technetwork/java/javase/downloads/index.html下载其当前版本并进行安装。
第 2 步:设置 Java 环境
将环境变量 JAVA_HOME 设置为指向计算机上安装 Java 的基本目录位置。例如,
先生。 | 平台及描述 |
---|---|
1 |
Windows 将 JAVA_HOME 设置为 C:\ProgramFiles\java\jdk11.0.11 |
2 |
Linux 导出 JAVA_HOME = /usr/local/java-current |
将 Java 编译器位置的完整路径附加到系统路径。
先生。 | 平台及描述 |
---|---|
1 | Windows 将字符串“C:\Program Files\Java\jdk11.0.11\bin”附加到系统变量 PATH 的末尾。 |
2 | Linux 导出路径=$PATH:$JAVA_HOME/bin/ |
如上所述,从命令提示符处执行命令java -version 。
第 3 步:安装 Apache POI 库
从https://poi.apache.org/download.html下载最新版本的 Apache POI ,并将其内容解压缩到一个文件夹,从该文件夹中可以将所需的库链接到您的 Java 程序。让我们假设这些文件收集在 C 驱动器上的文件夹中。
将所需jar的完整路径添加到 CLASSPATH 中,如下所示。
先生。 | 平台及描述 |
---|---|
1 | Windows 将以下字符串附加到用户变量的末尾 类路径 - C:\poi-bin-5.1.0\poi-5.1.0.jar; C:\poi-bin-5.1.0\poi-ooxml-5.1.0.jar; C:\poi-bin-5.1.0\poi-ooxml-full-5.1.0.jar; C:\poi-bin-5.1.0\lib\commons-codec-1.15.jar; C:\poi-bin-5.1.0\lib\commons-collections4-4.4.jar; C:\poi-bin-5.1.0\lib\commons-io-2.11.0.jar; C:\poi-bin-5.1.0\lib\commons-math3-3.6.1.jar; C:\poi-bin-5.1.0\lib\log4j-api-2.14.1.jar; C:\poi-bin-5.1.0\lib\SparseBitSet-1.2.jar; C\poi-bin-5.1.0\ooxml-lib\commons-compress-1.21.jar C\poi-bin-5.1.0\ooxml-lib\commons-logging-1.2.jar C\poi-bin-5.1.0\ooxml-lib\curvesapi-1.06.jar C\poi-bin-5.1.0\ooxml-lib\slf4j-api-1.7.32.jar C\poi-bin-5.1.0\ooxml-lib\xmlbeans-5.0.2.jar |
2 | Linux 导出 CLASSPATH = $CLASSPATH: /usr/share/poi-bin-5.1.0/poi-5.1.0.jar.tar: /usr/share/poi-bin-5.1.0/poi-ooxml-5.1.0.tar: /usr/share/poi-bin-5.1.0/poi-ooxml-full-5.1.0.tar: /usr/share/poi-bin-5.1.0/lib/commons-codec-1.15.jar.tar: /usr/share/poi-bin-5.1.0/lib/commons-collections4-4.4.tar: /usr/share/poi-bin-5.1.0/lib/commons-io-2.11.0.tar: /usr/share/poi-bin-5.1.0/lib/commons-math3-3.6.1.tar: /usr/share/poi-bin-5.1.0/lib/log4j-api-2.14.1.tar: /usr/share/poi-bin-5.1.0/lib/SparseBitSet-1.2.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/commons-compress-1.21.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/commons-logging-1.2.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/curvesapi-1.06.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/slf4j-api-1.7.32.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/xmlbeans-5.0.2.tar: |
Apache POI Word - 核心类
本章将带您了解 Apache POI 用于管理 Word 文档的类和方法。
文档
这是一个标记接口(接口不包含任何方法),通知实现的类可以创建word文档。
XWPF文档
这是org.apache.poi.xwpf.usermodel包下的一个类。它用于创建 .docx 文件格式的 MS-Word 文档。
类方法
先生。 | 方法及说明 |
---|---|
1 | 犯罪() 提交并保存文档。 |
2 | 创建段落() 在本文档中添加一个新段落。 |
3 | 创建表() 默认情况下创建一个具有一行一列的空表。 |
4 | 创建目录() 创建 Word 文档的目录。 |
5 | 获取段落() 返回包含页眉或页脚文本的段落。 |
6 | 获取样式() 返回使用的样式对象。 |
对于此类的其余方法,请参阅完整的 API 文档:
包 org.apache.poi.openxml4j.opc.internal。
XWFP段落
这是org.apache.poi.xwpf.usermodel包下的一个类,用于在word文档中创建段落。该实例还用于将所有类型的元素添加到Word文档中。
类方法
先生。 | 方法及说明 |
---|---|
1 | 创建运行() 在此段落中添加一个新的运行。 |
2 | 获取对齐方式() 返回应用于本段落中文本的段落对齐方式。 |
3 | setAlignment(段落对齐对齐) 指定应用于本段落中文本的段落对齐方式。 |
4 | setBorderBottom(边框边框) 指定应显示在一组段落下方的边框,这些段落具有相同的段落边框设置集。 |
5 | setBorderLeft(边框边框) 指定应显示在页面左侧指定段落周围的边框。 |
6 | setBorderRight(边框边框) 指定应显示在页面右侧指定段落周围的边框。 |
7 | setBorderTop(边框边框) 指定应显示在具有相同段落边框设置集的一组段落上方的边框。 |
对于此类的其余方法,请参阅完整的 API 文档:
XWPF运行
这是org.apache.poi.xwpf.usermodel包下的一个类,用于向段落添加文本区域。
类方法
先生。 | 方法及说明 |
---|---|
1 | 添加中断() 指定应在运行内容的当前位置放置一个中断。 |
2 | 添加选项卡() 指定选项卡应放置在运行内容中的当前位置。 |
3 | setColor(java.lang.String rgbStr) 设置文本颜色。 |
4 | setFontSize(int 大小) 指定显示时应用于此运行内容中的所有非复杂脚本字符的字体大小。 |
5 | setText(java.lang.String 值) 设置此文本运行的文本。 |
6 | setBold(布尔值) 指定在文档中显示时是否应将粗体属性应用于此运行内容中的所有非复杂脚本字符。 |
对于此类的其余方法,请参阅完整的 API 文档:
XWPF风格
这是org.apache.poi.xwpf.usermodel包下的类,用于为word文档中的对象元素添加不同的样式。
类方法
先生。 | 方法及说明 |
---|---|
1 | 获取下一个样式ID() 用于获取下一个样式的StyleID。 |
2 | 获取样式Id() 用于获取样式的StyleID。 |
3 | 获取样式() 它用于获取样式。 |
4 | setStyleId(java.lang.String styleId) 用于设置styleID。 |
对于此类的其余方法,请参阅完整的 API 文档:
XWPFT表
这是org.apache.poi.xwpf.usermodel包下的类,用于将表格数据添加到word文档中。
类方法
先生。 | 方法及说明 |
---|---|
1 | 添加新列() 为此表中的每一行添加一个新列。 |
2 | addRow(XWPFTableRow 行,int pos) 将新行添加到表中的位置 pos 处。 |
3 | 创建行() 创建一个新的 XWPFTableRow 对象,其中包含与当时定义的列数一样多的单元格。 |
4 | setWidth(int 宽度) 设置列的宽度。 |
对于此类的其余方法,请参阅完整的 API 文档: POI API 文档
XWPFWordExtractor
这是org.apache.poi.xwpf.extractor包下的类。它是一个基本的解析器类,用于从 Word 文档中提取简单文本。
类方法
先生。 | 方法及说明 |
---|---|
1 | 获取文本() 从文档中检索所有文本。 |
对于此类的其余方法,请参阅完整的 API 文档: POI API 文档
Apache POI Word - 文档
这里的术语“文档”是指 MS-Word 文件。完成本章后,您将能够使用 Java 程序创建新文档并打开现有文档。
创建空白文档
下面的简单程序用于创建一个空白的 MS-Word 文档 -
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.XWPFDocument; public class CreateDocument { public static void main(String[] args)throws Exception { //Blank Document XWPFDocument document = new XWPFDocument(); //Write the Document in file system FileOutputStream out = new FileOutputStream( new File("createdocument.docx")); document.write(out); out.close(); System.out.println("createdocument.docx written successully"); } }
将上述 Java 代码保存为CreateDocument.java,然后从命令提示符编译并执行它,如下所示 -
$javac CreateDocument.java $java CreateDocument
如果您的系统环境配置了 POI 库,它将编译并执行以在当前目录中生成一个名为createdocument.docx的空白 Word 文档文件,并在命令提示符中显示以下输出 -
createdocument.docx written successfully
Apache POI Word - 段落
在本章中,您将学习如何创建段落以及如何使用 Java 将其添加到文档中。段落是Word 文件中页面的一部分。
完成本章后,您将能够创建段落并对其执行读取操作。
创建一个段落
首先,让我们使用前面章节中讨论的引用类创建一个段落。按照上一章的思路,先创建一个Document,然后我们就可以创建一个Paragraph。
以下代码片段用于创建电子表格 -
//Create Blank document XWPFDocument document = new XWPFDocument(); //Create a blank spreadsheet XWPFParagraph paragraph = document.createParagraph();
在段落上运行
您可以使用Run输入文本或任何对象元素。使用 Paragraph 实例,您可以创建run。
以下代码片段用于创建 Run。
XWPFRun run = paragraph.createRun();
写入一个段落
让我们尝试在文档中输入一些文本。考虑以下文本数据 -
At tutorialspoint.com, we strive hard to provide quality tutorials for self-learning purpose in the domains of Academics, Information Technology, Management and Computer Programming Languages.
下面的代码用于将上面的数据写入一个段落中。
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class CreateParagraph { public static void main(String[] args)throws Exception { //Blank Document XWPFDocument document = new XWPFDocument(); //Write the Document in file system FileOutputStream out = new FileOutputStream(new File("createparagraph.docx")); //create Paragraph XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); run.setText("At tutorialspoint.com, we strive hard to " + "provide quality tutorials for self-learning " + "purpose in the domains of Academics, Information " + "Technology, Management and Computer Programming Languages."); document.write(out); out.close(); System.out.println("createparagraph.docx written successfully"); } }
将上述 Java 代码保存为CreateParagraph.java,然后从命令提示符编译并运行它,如下所示 -
$javac CreateParagraph.java $java CreateParagraph
它将编译并执行以在当前目录中生成名为createparagraph.docx的 Word 文件,您将在命令提示符中获得以下输出 -
createparagraph.docx written successfully
createparagraph.docx文件如下所示。
Apache POI Word - 边框
在本章中,您将学习如何使用 Java 编程将边框应用于段落。
应用边框
以下代码用于在文档中应用边框 -
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.Borders; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class ApplyingBorder { public static void main(String[] args)throws Exception { //Blank Document XWPFDocument document = new XWPFDocument(); //Write the Document in file system FileOutputStream out = new FileOutputStream(new File("applyingborder.docx")); //create paragraph XWPFParagraph paragraph = document.createParagraph(); //Set bottom border to paragraph paragraph.setBorderBottom(Borders.BASIC_BLACK_DASHES); //Set left border to paragraph paragraph.setBorderLeft(Borders.BASIC_BLACK_DASHES); //Set right border to paragraph paragraph.setBorderRight(Borders.BASIC_BLACK_DASHES); //Set top border to paragraph paragraph.setBorderTop(Borders.BASIC_BLACK_DASHES); XWPFRun run = paragraph.createRun(); run.setText("At tutorialspoint.com, we strive hard to " + "provide quality tutorials for self-learning " + "purpose in the domains of Academics, Information " + "Technology, Management and Computer Programming " + "Languages."); document.write(out); out.close(); System.out.println("applyingborder.docx written successully"); } }
将上述代码保存在名为ApplyingBorder.java的文件中,从命令提示符编译并执行它,如下所示 -
$javac ApplyingBorder.java $java ApplyingBorder
如果您的系统配置了POI库,那么它将编译并执行以在当前目录中生成名为applyingborder.docx的Word文档,并显示以下输出 -
applyingborder.docx written successfully
applyborder.docx文件如下所示 -
Apache POI Word - 表格
在本章中,您将学习如何在文档中创建数据表。您可以使用XWPFTable类创建表数据。通过将每一行添加到表格中并将每个单元格添加到行中,您将获得表格数据。
创建表
以下代码用于在文档中创建表格 -
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableRow; public class CreateTable { public static void main(String[] args)throws Exception { //Blank Document XWPFDocument document = new XWPFDocument(); //Write the Document in file system FileOutputStream out = new FileOutputStream(new File("create_table.docx")); //create table XWPFTable table = document.createTable(); //create first row XWPFTableRow tableRowOne = table.getRow(0); tableRowOne.getCell(0).setText("col one, row one"); tableRowOne.addNewTableCell().setText("col two, row one"); tableRowOne.addNewTableCell().setText("col three, row one"); //create second row XWPFTableRow tableRowTwo = table.createRow(); tableRowTwo.getCell(0).setText("col one, row two"); tableRowTwo.getCell(1).setText("col two, row two"); tableRowTwo.getCell(2).setText("col three, row two"); //create third row XWPFTableRow tableRowThree = table.createRow(); tableRowThree.getCell(0).setText("col one, row three"); tableRowThree.getCell(1).setText("col two, row three"); tableRowThree.getCell(2).setText("col three, row three"); document.write(out); out.close(); System.out.println("create_table.docx written successully"); } }
将以上代码保存在名为 CreateTable.java 的文件中。从命令提示符编译并执行它,如下所示 -
$javac CreateTable.java $java CreateTable
它会在当前目录中生成一个名为createtable.docx的 Word 文件,并在命令提示符下显示以下输出 -
createtable.docx written successfully
createtable.docx文件如下所示 -
Apache POI Word - 字体和对齐方式
本章介绍如何使用 Java 在 Word 文档中应用不同的字体样式和对齐方式。一般来说,字体样式包括:字体大小、类型、粗体、斜体和下划线。对齐方式分为左对齐、居中对齐、右对齐和对齐。
字体样式
以下代码用于设置不同样式的字体 -
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.VerticalAlign; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class FontStyle { public static void main(String[] args)throws Exception { //Blank Document XWPFDocument document = new XWPFDocument(); //Write the Document in file system FileOutputStream out = new FileOutputStream(new File("fontstyle.docx")); //create paragraph XWPFParagraph paragraph = document.createParagraph(); //Set Bold an Italic XWPFRun paragraphOneRunOne = paragraph.createRun(); paragraphOneRunOne.setBold(true); paragraphOneRunOne.setItalic(true); paragraphOneRunOne.setText("Font Style"); paragraphOneRunOne.addBreak(); //Set text Position XWPFRun paragraphOneRunTwo = paragraph.createRun(); paragraphOneRunTwo.setText("Font Style two"); paragraphOneRunTwo.setTextPosition(100); //Set Strike through and Font Size and Subscript XWPFRun paragraphOneRunThree = paragraph.createRun(); paragraphOneRunThree.setStrike(true); paragraphOneRunThree.setFontSize(20); paragraphOneRunThree.setSubscript(VerticalAlign.SUBSCRIPT); paragraphOneRunThree.setText(" Different Font Styles"); document.write(out); out.close(); System.out.println("fontstyle.docx written successully"); } }
将上述代码保存为FontStyle.java,然后从命令提示符编译并执行它,如下所示 -
$javac FontStyle.java $java FontStyle
它将在当前目录中生成一个名为fontstyle.docx的 Word 文件,并在命令提示符下显示以下输出 -
fontstyle.docx written successfully
fontstyle.docx文件如下所示。
结盟
以下代码用于设置段落文本的对齐方式 -
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class AlignParagraph { public static void main(String[] args)throws Exception { //Blank Document XWPFDocument document = new XWPFDocument(); //Write the Document in file system FileOutputStream out = new FileOutputStream( new File("alignparagraph.docx")); //create paragraph XWPFParagraph paragraph = document.createParagraph(); //Set alignment paragraph to RIGHT paragraph.setAlignment(ParagraphAlignment.RIGHT); XWPFRun run = paragraph.createRun(); run.setText("At tutorialspoint.com, we strive hard to " + "provide quality tutorials for self-learning " + "purpose in the domains of Academics, Information " + "Technology, Management and Computer Programming " + "Languages."); //Create Another paragraph paragraph = document.createParagraph(); //Set alignment paragraph to CENTER paragraph.setAlignment(ParagraphAlignment.CENTER); run = paragraph.createRun(); run.setText("The endeavour started by Mohtashim, an AMU " + "alumni, who is the founder and the managing director " + "of Tutorials Point (I) Pvt. Ltd. He came up with the " + "website tutorialspoint.com in year 2006 with the help" + "of handpicked freelancers, with an array of tutorials" + " for computer programming languages. "); document.write(out); out.close(); System.out.println("alignparagraph.docx written successfully"); } }
将上面的代码保存为AlignParagraph.java,然后从命令提示符编译并执行它,如下所示 -
$javac AlignParagraph.java $java AlignParagraph
它将在当前目录中生成一个名为alignparagraph.docx的Word文件,并在命令提示符中显示以下输出 -
alignparagraph.docx written successfully
alignparagraph.docx文件如下所示 -
Apache POI Word - 文本提取
本章介绍如何使用 Java 从 Word 文档中提取简单的文本数据。如果您想从 Word 文档中提取元数据,请使用 Apache Tika。
对于 .docx 文件,我们使用 org.apache.poi.xwpf.extractor.XPFFWordExtractor 类从 Word 文件中提取并返回简单数据。同样,我们有不同的方法从 Word 文件中提取标题、脚注、表格数据等。
以下代码显示了如何从 Word 文件中提取简单文本 -
import java.io.FileInputStream; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; public class WordExtractor { public static void main(String[] args)throws Exception { XWPFDocument docx = new XWPFDocument(new FileInputStream("createparagraph.docx")); //using XWPFWordExtractor Class XWPFWordExtractor we = new XWPFWordExtractor(docx); System.out.println(we.getText()); } }
将以上代码保存为WordExtractor.java。从命令提示符编译并执行它,如下所示 -
$javac WordExtractor.java $java WordExtractor
它将生成以下输出 -
At tutorialspoint.com, we strive hard to provide quality tutorials for self-learning purpose in the domains of Academics, Information Technology, Management and Computer Programming Languages.