1、文档API
Apache POI 提供纯 Java API 来处理 Microsoft Office word。我们可以创建新的word文档,从Java程序中写入和读取数据。
- HWPF(Horrible Word Processor Format)用于读写MS-Word 的.doc扩展文件。
- XWPF(XML Word Processor Format)用于读写MS-Word 的.docx扩展文件。
常用类
类名 | 描述 |
---|---|
HWPFDocument | 它用于处理 .doc 扩展文件 |
XWPFDocument | 它用于创建具有 .docx 文件格式并位于org.apache.poi.xwpf.usermodel包中的MS-Word 文档 |
XWPFParagraph | 它用于在word文档中创建段落,位于org.apache.poi.xwpf.usermodel包中 |
XWPFRun | 它用于向段落添加文本区域并位于org.apache.poi.xwpf.usermodel包中 |
XWPFStyle | 它用于为word文档中的对象元素添加不同的样式,位于org.apache.poi.xwpf.usermodel包中 |
XWPFTable | 用于在word文档中添加表格,位于org.apache.poi.xwpf.usermodel包中 |
XWPFWordExtractor | 它是一个基本的解析器类,用于从 Word 文档中提取简单文本 |
2、创建文档
为了创建新的 Microsoft Word 文件,Apache POI 提供了 XWPFDocument 类。这个类在Java程序中用于处理word文档。
示例
public class CreateWord {
public static void main(String[] args) {
XWPFDocument document = new XWPFDocument();
try(OutputStream fileOut = new FileOutputStream("data/create.docx")) {
document.write(fileOut);
System.out.println("File created");
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
3、创建段落
为了在 MS word 文件中创建段落,Apache POI 提供了 XWPFParagraph 类。此类使用 XWPFRun 来设置段落的 setText() 方法。
示例
public class ParagraphExample {
public static void main(String[] args) {
XWPFDocument doc = new XWPFDocument();
try(OutputStream os = new FileOutputStream("data/paragraph.doc")) {
XWPFParagraph paragraph = doc.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Hello, This is yiidian. This paragraph is written "+
"by using XWPFParagrah.");
doc.write(os);
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
4、创建表格
要在 Word 文档中创建表格,我们可以使用位于 org.apache.poi.xwpf.usermodel.XWPFTable 包中的XWPFTable类。Apache POI 添加了一个用于创建行的类 XWPFTableRow 。
XWPFTable
方法 | 描述 |
---|---|
public void addNewCol() | 它为该表中的每一行添加一个新列 |
public void addRow(XWPFTableRow row) | 它向表中添加了一个新行 |
public XWPFTableRow createRow() | 它创建一个新的 |
public java.lang.String getText() | 它用于提取单元格中的文本 |
public void setWidth(int width) | 它用于设置宽度 |
public int getNumberOfRows() | 它用于获取表中的行数 |
示例
public class TableExample {
public static void main(String[] args) {
XWPFDocument document= new XWPFDocument();
try(FileOutputStream out = new FileOutputStream(new File("data/table.docx"))){
//创建表格
XWPFTable tab = document.createTable();
//第一行
XWPFTableRow row = tab.getRow(0);
//创建列
row.getCell(0).setText("Sl. No.");
row.addNewTableCell().setText("Name");
row.addNewTableCell().setText("Email");
//第二行
row = tab.createRow();
row.getCell(0).setText("1.");
row.getCell(1).setText("eric");
row.getCell(2).setText("[email protected]");
//第三行
row = tab.createRow();
row.getCell(0).setText("2.");
row.getCell(1).setText("jack");
row.getCell(2).setText("[email protected]");
document.write(out);
}catch(Exception e) {
System.out.println(e);
}
}
}
5、设置文字样式
为了设置文本的样式、字体、对齐方式等,Apache POI 提供了setItalic()、setBold() 等方法。这些方法很有用,可以在Java 程序中用于处理word 文档。
示例
public class StyleExample {
public static void main(String[] args) {
XWPFDocument doc = new XWPFDocument();
try(OutputStream os = new FileOutputStream("data/style.docx")) {
XWPFParagraph paragraph = doc.createParagraph();
//Set Bold an Italic
XWPFRun xr = paragraph.createRun();
xr.setBold(true);
xr.setItalic(true);
xr.setText("This text is Bold and have Italic style");
xr.addBreak();
doc.write(os);
}catch(Exception e) {
System.out.println(e);
}
}
}
6、词对齐
为了将文本向右、向左和居中对齐,Apache POI 提供了 setAlignment() 方法,该方法采用对齐常量(例如 CENTER)。
- ParagraphAlignment.RIGHT:将段落向右对齐。
- ParagraphAlignment.LEFT:将段落左对齐。
- ParagraphAlignment.CENTER:将段落与中心对齐。
示例
public class AligningExample {
public static void main(String[] args) {
XWPFDocument doc = new XWPFDocument();
try(OutputStream os = new FileOutputStream("data/aligning.docx")) {
XWPFParagraph paragraph = doc.createParagraph();
paragraph.setAlignment(ParagraphAlignment.RIGHT);
XWPFRun run = paragraph.createRun();
run.setText("Text is aligned right");
doc.write(os);
}catch(Exception e) {
System.out.println(e);
}
}
}
7、提取文本
为了从word文档中提取文本,XWPFWordExtractor类提供了一个方法 getText() 。此方法从文档中获取所有文本。
示例
public class ReadingText {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("data/style.docx")) {
XWPFDocument file = new XWPFDocument(OPCPackage.open(fis));
XWPFWordExtractor ext = new XWPFWordExtractor(file);
System.out.println(ext.getText());
}catch(Exception e) {
System.out.println(e);
}
}
}
This text is Bold and have Italic style
8、提取段落
为了提取段落文本,我们使用 XWPFDocument 类的 getParagraphs() 方法。此方法返回文档所有段落的列表,该列表可以存储在列表变量中并通过迭代循环获取。
示例
public class ReadParagraphExample {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("data/aa.docx")) {
XWPFDocument doc = new XWPFDocument(OPCPackage.open(fis));
java.util.List<XWPFParagraph> paragraphs = doc.getParagraphs();
for (XWPFParagraph paragraph: paragraphs){
System.out.println(paragraph.getText());
}
}catch(Exception e) {
System.out.println(e);
}
}
}
111111111
22222222
33
4444
546564