🍁 作者:知识浅谈,CSDN签约讲师&博客专家,华为云云享专家,阿里云专家博主,InfoQ签约作者
📌 擅长领域:全栈工程师、爬虫、ACM算法,大数据,深度学习
💒 公众号:知识浅谈
🔥 微信:zsqtcyl 联系我领取福利
🎈测试案例
把下图中的${replaceHolder} 替换掉,并在下方表格中动态插入5条数据
插入之后的情况:
🎈代码实现
- 引入依赖
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-full</artifactId> <version>5.2.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>5.2.3</version> </dependency>
- 代码实现
// List<List<String>> insertData 插入数据:两行两列
//tablePos : 表示的是word文档中的第几个表格
//在word中的表格中动态插入数据,主要在下方第四个位置 //4.在指定的表格中插入数据
public class DocxUtil {
//查找并替换文本和图像
public static void searchAndReplace(InputStream inputStream, OutputStream outputStream, Map<String,String>map, Map<String,InputStream> imgMap, String template, int tablePos, List<List<String>> insertData) {
//如果是打印文档,可以把没有的内容替换为空字符串
try {
//doc文件HWPFDocument读取,docx使用XWPFDocument读取
XWPFDocument document = new XWPFDocument(inputStream);
//1.word文本段落的处理
Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
while (itPara.hasNext()) {
XWPFParagraph para = itPara.next();
replaceText(para,map);//替换非表格中的文本
}
//2.word中表格的处理
Iterator<XWPFTable> itTable = document.getTablesIterator();
while (itTable.hasNext()) {
XWPFTable table = itTable.next();
int count = table.getNumberOfRows();
for (int i = 0; i < count; i++) {
XWPFTableRow row = table.getRow(i);
List<XWPFTableCell> cells = row.getTableCells();
for (XWPFTableCell cell : cells) {
for (XWPFParagraph paragraph : cell.getParagraphs()) {