引用文章

(19条消息) 使用POI读写word docx文件wangxintong_1992的博客-CSDN博客poi 写入word

POI操作word模板并生成新的word – 简书 (jianshu.com)

Maven坐标

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

XWPF常用类

POI在读写word docx文件时是通过XWPF模块来进行的,其核心是XWPFDocument。一个XWPFDocument代表一个docx文档,其可以用来读docx文档,也可以用来写docx文档。XWPFDocument中主要包含下面这几种对象:

XWPFDocument:代表一个docx文档

XWPFParagraph:代表一个段落。

XWPFRun:代表具有相同属性的一段文本。

XWPFTable:代表一个表格。

XWPFTableRow:表格的一行。

XWPFTableCell:表格对应的一个单元格。

表格文本替换大体思路

获取XWPFDocument document对象
文档中替换的值用${属性值} 
注:需要整体复制${属性值}到文档,手敲会导致无法识别为一个整体

-> 获取文档中的所有表格 List<XWPFTable> tables = document.getTables();
-> 获取每个表格中的所有表格行(以获取第一个表格为例) List<XWPFTableRow> rows = tables.get(0).getRows()
-> 获取每一行表格对应的所有单元格。List<XWPFTableCell> cells = row.getTableCells();
-> 对每一个单元格判断是否有需要替换的文本
-> 获取单元格中的所有段落 List<XWPFParagraph> paragraphs = cell.getParagraphs();
-> 获取所有的文本 List<XWPFRun> runs = paragraph.getRuns()
-> 对文本中需要替换的部分使用 run.setText(替换值,0);
 (0代表插入的文本位置是哪里,相对于run而言,0就是run本身所在的位置)
 (断点调试可以看出run里面保存的是段落中的分词)</pre>

参考代码

package com.temp;

import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.usermodel.*;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class WordToNewWordUtils2 {

    

如有错误,欢迎指正

  

作者:墨悔
链接:https://www.jianshu.com/p/fb66b5308d4f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。