一、简介

Apache POI是Microsoft文档的Java API,可以使用它创建或修改MS-Office文件。其中,XWPF有一个相当稳定的核心API,提供对.docx文件主要部分的读写访问。

二、安装

pom.xml:

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>5.0.0</version>
</dependency>

三、核心类

1、文档

  • Document

接口,它的实现类可以创建word文档。

  • XWPFDocument

用来创建.docx文件格式的MS-Word文档。

XWPFDocument document = new XWPFDocument();
FileOutputStream out = new FileOutputStream(new File("D:/hello.docx"));
document.write(out);
out.close();

2、段落

  • XWPFParagraph

用于在Word文档中创建段落和将所有类型的元素添加到Word文档中。

XWPFParagraph paragraph = document.createParagraph();
  • XWPFRun

用于向段落添加文本区域。

XWPFRun run = paragraph.createRun();
run.setText("Hello World.");

3、表格

  • XWPFTable

用于将表格数据添加到word文档中。

XWPFTable table = document.createTable();

XWPFTableRow row1 = table.getRow(0);
row1.getCell(0).setText("1,1");
row1.addNewTableCell().setText("1,2");
row1.addNewTableCell().setText("1,3");

XWPFTableRow row2 = table.createRow();
row2.getCell(0).setText("2,1");
row2.getCell(1).setText("2,2");
row2.getCell(2).setText("2,3");

XWPFTableRow row3 = table.createRow();
row3.getCell(0).setText("3,1");
row3.getCell(1).setText("3,2");
row3.getCell(2).setText("3,3");

4、提取文本

  • XWPFWordExtractor

一个基本的解析器类,用于从Word文档中提取简单文本。

XWPFWordExtractor extractor = new XWPFWordExtractor(document);
System.out.println(extractor.getText());

四、样例

1、Hello World

public static void main(String[] args) throws Exception {
	//文档
	try (XWPFDocument document = new XWPFDocument()){
		//段落
		XWPFParagraph paragraph = document.createParagraph();
		//边框
		paragraph.setBorderTop(Borders.DOT_DASH);
		paragraph.setBorderBottom(Borders.DOT_DASH);
		//对齐方式
		paragraph.setAlignment(ParagraphAlignment.CENTER);
		paragraph.setSpacingAfter(100);
		
		XWPFRun runOne = paragraph.createRun();
		//文字样式
		runOne.setFontSize(20);
		//段落内容
		runOne.setText("Hello World.");
		
		XWPFRun runTwo = paragraph.createRun();
		runTwo.setBold(true);
		runTwo.setText("Hello POI.");
		
		XWPFTable table = document.createTable(3, 3);
		//宽度100%
		table.setWidth(100);
		table.setWidthType(TableWidthType.PCT);
		
		XWPFTableRow row1 = table.getRow(0);
		row1.getCell(0).setText("1,1");
		row1.getCell(1).setText("1,2");
		row1.getCell(2).setText("1,3");
		
		XWPFTableRow row2 = table.getRow(1);
		row2.getCell(0).setText("2,1");
		row2.getCell(1).setText("2,2");
		row2.getCell(2).setText("2,3");
		
		XWPFTableRow row3 = table.getRow(2);
		row3.getCell(0).setText("3,1");
		row3.getCell(1).setText("3,2");
		row3.getCell(2).setText("3,3");
		
		try (FileOutputStream out = new FileOutputStream(new File("G:/files/hello.docx"))) {
			document.write(out);
		}
	}
}

运行后生成的Word文档内容:

2、提取简单文本

public static void main(String[] args) throws Exception {
	try(XWPFDocument document = new XWPFDocument(new FileInputStream(new File("G:/files/hello.docx")))){
		try(XWPFWordExtractor extractor = new XWPFWordExtractor(document)){
			System.out.println(extractor.getText());
		}
	}
}

输出:

Hello World.Hello POI.
1,1	1,2	1,3
2,1	2,2	2,3
3,1	3,2	3,3
参考资料:

POI-XWPF - Quick Guide

Apache POI Word Tutorial