引用文章
(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 {