java poi word详解

2025-04-13 25

java poi word详解

在日常开发中,经常需要生成或操作Word文档。Apache POI是一个非常强大的工具库,能够帮助我们轻松地处理Excel、Word等Office文件。如何使用Java中的POI库来操作Word文档,并提供多种解决方案和代码示例。

开头解决方案

Apache POI提供了对Microsoft Word文档的读写支持,主要通过XWPFDocument类来操作.docx格式的文件(对于.doc文件则需要使用HWPF)。从以下几个方面进行讲解:
1. 如何创建一个新的Word文档。
2. 如何向文档中添加段落、表格等内容。
3. 如何读取已有的Word文档内容。
4. 提供多种实现思路以满足不同的业务需求。


1. 创建一个新的Word文档

创建一个新的Word文档非常简单,只需要实例化XWPFDocument类即可。以下是一个完整的代码示例:

java
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;</p>

<p>import java.io.FileOutputStream;
import java.io.IOException;</p>

<p>public class CreateWordExample {
    public static void main(String[] args) throws IOException {
        // 创建一个新的Word文档
        XWPFDocument document = new XWPFDocument();</p>

<pre><code>    // 创建一个段落
    XWPFParagraph paragraph = document.createParagraph();
    XWPFRun run = paragraph.createRun();
    run.setText("这是一个新的Word文档。");

    // 设置字体样式
    run.setBold(true); // 加粗
    run.setFontFamily("宋体"); // 设置字体
    run.setFontSize(16); // 设置字号

    // 将文档保存到文件
    try (FileOutputStream out = new FileOutputStream("example.docx")) {
        document.write(out);
    }

    // 关闭文档
    document.close();
}

}

说明:
- XWPFDocument:表示整个Word文档。
- XWPFParagraph:表示文档中的段落。
- XWPFRun:表示段落中的文本块,可以设置字体、颜色、加粗等属性。


2. 向文档中添加表格

在Word文档中添加表格也非常常见。以下代码展示了如何创建一个包含两行三列的表格:

java
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;</p>

<p>import java.io.FileOutputStream;
import java.io.IOException;</p>

<p>public class AddTableExample {
    public static void main(String[] args) throws IOException {
        // 创建一个新的Word文档
        XWPFDocument document = new XWPFDocument();</p>

<pre><code>    // 创建一个段落
    XWPFParagraph paragraph = document.createParagraph();
    XWPFRun run = paragraph.createRun();
    run.setText("下面是一个表格示例:");

    // 创建一个表格
    XWPFTable table = document.createTable(2, 3); // 2行3列

    // 填充表格内容
    for (int rowNum = 0; rowNum < 2; rowNum++) {
        XWPFTableRow row = table.getRow(rowNum);
        for (int cellNum = 0; cellNum < 3; cellNum++) {
            XWPFTableCell cell = row.getCell(cellNum);
            cell.setText("行" + (rowNum + 1) + "列" + (cellNum + 1));
        }
    }

    // 将文档保存到文件
    try (FileOutputStream out = new FileOutputStream("table_example.docx")) {
        document.write(out);
    }

    // 关闭文档
    document.close();
}

}

说明:
- XWPFTable:表示表格。
- XWPFTableRow:表示表格中的行。
- XWPFTableCell:表示表格中的单元格。


3. 读取现有的Word文档

如果需要读取已有的Word文档内容,可以通过XWPFDocument类加载文件并逐段读取内容。以下是一个示例代码:

java
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;</p>

<p>import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;</p>

<p>public class ReadWordExample {
    public static void main(String[] args) throws IOException {
        // 打开现有的Word文档
        try (FileInputStream fis = new FileInputStream("example.docx");
             XWPFDocument document = new XWPFDocument(fis)) {</p>

<pre><code>        // 获取所有段落
        List<XWPFParagraph> paragraphs = document.getParagraphs();
        for (XWPFParagraph paragraph : paragraphs) {
            System.out.println("段落内容: " + paragraph.getText());
        }
    }
}

}

说明:
- 使用FileInputStream加载Word文件。
- 调用document.getParagraphs()获取文档中的所有段落。


4. 多种实现思路

4.1 替换模板中的占位符

在实际项目中,我们可能需要根据模板生成Word文档。以下是一个简单的占位符替换示例:

java
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;</p>

<p>import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;</p>

<p>public class TemplateReplaceExample {
    public static void main(String[] args) throws IOException {
        try (FileInputStream fis = new FileInputStream("template.docx");
             XWPFDocument document = new XWPFDocument(fis)) {</p>

<pre><code>        // 遍历所有段落,替换占位符
        List<XWPFParagraph> paragraphs = document.getParagraphs();
        for (XWPFParagraph paragraph : paragraphs) {
            String text = paragraph.getText();
            if (text != null && text.contains("${name}")) {
                paragraph.getRuns().get(0).setText(text.replace("${name}", "张三"), 0);
            }
        }

        // 保存修改后的文档
        try (FileOutputStream fos = new FileOutputStream("output.docx")) {
            document.write(fos);
        }
    }
}

}

说明:
- 模板文件中可以包含类似${name}的占位符。
- 遍历段落并替换占位符为实际值。

4.2 插入图片

在Word文档中插入图片也很常见。以下是一个插入图片的示例:

java
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;</p>

<p>import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;</p>

<p>public class InsertImageExample {
    public static void main(String[] args) throws IOException {
        XWPFDocument document = new XWPFDocument();</p>

<pre><code>    // 创建段落
    XWPFParagraph paragraph = document.createParagraph();
    XWPFRun run = paragraph.createRun();

    // 添加文字
    run.setText("以下是一张图片:");

    // 插入图片
    File imageFile = new File("image.png");
    BufferedImage img = ImageIO.read(imageFile);
    ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
    ImageIO.write(img, "png", byteArrayOut);
    run.addPicture(new FileInputStream(imageFile), XWPFDocument.PICTURE_TYPE_PNG, "image.png", 200, 200);

    // 保存文档
    try (FileOutputStream out = new FileOutputStream("image_example.docx")) {
        document.write(out);
    }

    document.close();
}

}

说明:
- 使用run.addPicture()方法插入图片。
- 需要指定图片类型(如PNG、JPG)以及图片尺寸。


通过以上几种方式,我们可以灵活地使用Java POI库来操作Word文档。无论是创建新文档、读取现有文档还是插入图片、替换模板,都可以轻松实现。希望能为你提供一些有价值的参考!

Image

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载