Apache POI Word - 快速指南

2021-10-29 16:04 更新

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(可怕的SpreadSheet格式):用于读取和写入.xls格式的MS-Excel文件。

  • XSSF(XML SpreadSheet格式):用于MS-Excel的.xlsx文件格式。

  • HPSF(可怕属性集格式):用于提取MS-Office文件的属性集。

  • HWPF(可怕字处理器格式):用于读取和写入MS-Word的.doc扩展文件。

  • XWPF(XML字处理器格式):用于读取和写入MS-Word的扩展文件 .docx

  • HSLF(可怕的幻灯片布局格式):用于阅读,创建和编辑PowerPoint演示文稿。

  • HDGF(Horrible DiaGram格式):它包含MS-Visio二进制文件的类和方法。

  • HPBF(Horrible PuBlisher格式):用于读取和写入MS-Publisher文件。

本教程将指导您完成使用Java处理MS-Word文件的过程。 因此,讨论仅限于HWPF和XWPF组件。

Apache POI Word - 安装

本章将介绍在基于Windows和Linux的系统上设置Apache POI的过程。 Apache POI可以轻松地安装和与您当前的Java环境集成,遵循几个简单的步骤,没有任何复杂的设置过程。 在安装时需要用户管理。

系统要求

JDKJava SE 2 JDK 1.5或更高版本
内存1 GB RAM(推荐)
磁盘空间无最低要求
操作系统版本Windows XP或以上版本,Linux

现在让我们继续安装Apache POI的步骤。

步骤1:验证Java安装

首先,您需要在系统上安装Java软件开发工具包(SDK)。 要验证这一点,请执行以下两个命令中的任何一个,具体取决于您正在使用的平台。

如果Java安装已正确完成,那么它将显示Java安装的当前版本和规范。 下表给出了样本输出:

平台命令示例输出
Windows

打开命令控制台并键入:

\> java -version

Java版本“1.7.0_60"

Java(TM)SE运行环境(版本1.7.0_60-b19)

Java热点(TM)64位服务器VM(构建24.60-b09,混合模式)

Linux

打开命令终端并键入:

$ java -version

java版本“1.7.0_25"

打开JDK运行时环境(rhel-2.3.10.4.el6_4-x86_64)

打开JDK 64位服务器虚拟机(构建23.7-b01,混合模式)

步骤2:设置Java环境

将环境变量JAVA_HOME设置为指向计算机上安装Java的基本目录位置。 例如,

平台描述
Windows将JAVA_HOME设置为C:\\ Program Files \\ java \\ jdk1.7.0_60
Linux导出JAVA_HOME = / usr / local / java-current

将Java编译器位置的完整路径附加到系统路径。

描述描述
Windows将字符串“C:\\ Program Files \\ Java \\ jdk1.7.0_60 \\ bin"附加到系统变量PATH的结尾。
Linux导出PATH = $ PATH:$ JAVA_HOME / bin /

如上所述,从命令提示符处执行命令 java - version

步骤3:安装Apache POI库

http://poi.apache.org/download下载最新版本的Apache POI。 html ,并将其内容解压缩到一个文件夹,从中可以将所需的库链接到Java程序。 让我们假设文件收集在C驱动器上的文件夹中。

以下图像显示已下载文件夹中的目录和文件结构:

将上述图片中突出显示的五个 jars 的完整路径添加到CLASSPATH。

描述描述
Windows

将以下字符串附加到用户变量CLASSPATH的结尾:

“C:\poi-3.9\poi-3.9-20121203.jar;"

“C:\poi-3.9\poi-ooxml-3.9-20121203.jar;"

“C:\poi-3.9\poi-ooxml-schemas-3.9-20121203.jar;"

“C:\poi-3.9\ooxml-lib\dom4j-1.6.1.jar;"

“C:\poi-3.9\ooxml-lib\xmlbeans-2.3.0.jar;.;"

Linux

导出CLASSPATH = $ CLASSPATH:

/usr/share/poi-3.9/poi-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-schemas-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-3.9-20121203.tar:

/usr/share/poi-3.9/ooxml-lib/dom4j-1.6.1.tar:

/usr/share/poi-3.9/ooxml-lib/xmlbeans-2.3.0.tar

Apache POI Word - 核心类

本章将介绍Apache POI用于管理Word文档的类和方法。

文件

这是一个标记接口(接口不包含任何方法),它通知实现的类可以创建一个word文档。

XWPF文档

这是 org.apache.poi.xwpf.usermodel 包下的类。 它用于创建.docx文件格式的MS-Word文档。

类方法:

S. No.方法和说明
1

commit()

提交并保存文档。

2

createParagraph()

在本文档中追加一个新段落。

3

createTable()

默认情况下,创建一个包含一行和一列的空表。

4

createTOC()

创建Word文档的内容表。

5

getParagraphs()

返回包含页眉或页脚文本的段落。

6

getStyle()

返回使用的样式对象。

对于此类的其余方法,请参考完整的API文档:

https://poi.apache.org/apidocs/index.html?org/apache/poi/openxml4j/opc/internal/package-summary.html

XWPF段落

这是 org.apache.poi.xwpf.usermodel 包下的类,用于在Word文档中创建段落。 此实例也用于将所有类型的元素添加到Word文档中。

类方法:

S. No.方法和说明
1

createRun()

将新运行附加到此段落。

2

getAlignment()

返回将应用于本段文本的段落对齐方式。

3

setAlignment(ParagraphAlignment align)

指定应适用于本段文本的段落对齐方式。

4

setBorderBottom(边框边框)

指定应显示在一组段落下方的边框,这些段落具有相同的一组段落边框设置。

5

setBorderLeft(边框边框)

指定应在页面左侧围绕指定段落显示的边框。

6

setBorderRight(Borders border)

指定应在页面右侧围绕指定段落显示的边框。

7

setBorderTop(边框边框)

指定应显示在具有相同的一组段落边框设置的一组段落上方的边框。

对于此类的其余方法,请参考完整的API文档:

https://poi.apache.org/apidocs/index.html?org/apache/poi/openxml4j/opc/internal/package-summary.html

XWPF运行

这是 org.apache.poi.xwpf.usermodel 包下的类,用于向段落中添加文本区域。

类方法:

S. No.方法和说明
1

addBreak()

指定中断应放置在运行内容中的当前位置。

2

addTab()

指定制表符应放置在运行内容中的当前位置。

3

setColor(java.lang.String rgbStr)

设置文本颜色。

4

setFontSize(int size)

指定在显示时应用于此运行内容中所有非复杂脚本字符的字体大小。

5

setText(java.lang.String value)

设置此文本运行的文本。

6

setBold(布尔值)

指定在文档中显示时,粗体属性是否应用于此运行内容中的所有非复杂脚本字符。

对于此类的其余方法,请参考完整的API文档:

https://poi.apache.org/apidocs/index.html?org/apache/poi/openxml4j/opc/internal/package-summary.html

XWPF样式

这是 org.apache.poi.xwpf.usermodel 包下的类,用于向word文档中的对象元素添加不同的样式。

类方法:

S. No.方法和说明
1

getNextStyleID()

它用于获取下一个样式的StyleID。

2

getStyleId()

它用于获取样式的StyleID。

3

getStyles()

它用于获取样式。

4

setStyleId(java.lang.String styleId)

它用于设置styleID。

对于此类的其余方法,请参考完整的API文档:

https://poi.apache.org/apidocs/index.html?org/apache/poi/openxml4j/opc/internal/package-summary.html

XWPF表格

这是 org.apache.poi.xwpf.usermodel 包下的类,用于将表数据添加到Word文档中。

类方法:

S. No.方法和说明
1

addNewCol()

为此表中的每一行添加一个新列。

2

addRow(XWPFTableRow row,int pos)

addRow(XWPFTableRow row,int pos)...

3

createRow()

创建一个新的XWPFTableRow对象,其具有与那一刻定义的列数一样多的单元格。

4

setWidth(int width)

设置列的宽度。

对于此类的其余方法,请参考完整的API文档:
https://poi.apache.org/apidocs/index.html?org/apache/poi/openxml4j/opc/internal/package-summary.html

XWPF字符提取器

这是 org.apache.poi.xwpf.extractor 包下的类。 它是一个基本的解析器类,用于从Word文档中提取简单文本。

类方法:

S. No.方法和说明
1

getText()

检索文档中的所有文本。

对于此类的其余方法,请参考完整的API文档:
https://poi.apache.org/apidocs/index.html?org/apache/poi/openxml4j/opc/internal/package-summary.html

Apache POI Word - 文档

这里术语“document"是指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 的空白Excel文件,并在命令提示符中显示以下输出:

createdocument.docx written successfully

Apache POI Word - 段落

在本章中,您将学习如何创建一个段落以及如何使用Java将其添加到文档中。 段落是Word文件中页面的一部分。

完成本章后,您将能够创建一个段落并对其执行读取操作。

创建段落

首先,让我们使用前面章节中讨论的引用类创建一个段落。 按照前面的章节,首先创建一个文档,然后我们可以创建一个段落。

以下代码段用于创建电子表格:

//Create Blank document
   XWPFDocument document= new XWPFDocument();
//Create a blank spreadsheet
   XWPFParagraph paragraph = document.createParagraph();

运行段落

您可以使用运行输入文本或任何对象元素。 使用Paragraph实例,您可以创建运行

以下代码段用于创建运行。

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库,那么它将编译并执行,以在当前目录中生成名为 appliedborder.docx 的Word文档,并显示以下输出:

applyingborder.docx written successfully

appliedborder.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 文件如下所示:

字体样式和对齐方式

本章介绍如何使用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

它将在当前目录中生成名为 font style.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

它将在当前目录中生成名为 align paragraph.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("create_paragraph.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.

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号