淘先锋技术网

首页 1 2 3 4 5 6 7

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