概述
jar包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
代码
package com.party.web.controller.common;
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class TestController {
/**
* word模板替换导出
* @param srcPath 模板文件的地址
* @param destPath 导出的文件保存地址
* @param map 替换的内容
* @return
*/
public static void searchAndReplace(String srcPath,String destPath, HashMap<String, Object> map) {
try {
// 替换的的关键字存放到Set集合中
Set<String> set = map.keySet();
// 读取模板文档
XWPFDocument document = new XWPFDocument(new FileInputStream(srcPath));
/**
* 替换段落中的指定文字
*/
// 读取文档中的段落,回车符为一个段落。
// 同一个段落里面会被“:”等符号隔开为多个对象
Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
while (itPara.hasNext()) {
// 获取文档中当前的段落文字信息
XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
List<XWPFRun> run = paragraph.getRuns();
// 遍历段落文字对象
for (int i = 0; i < run.size(); i++) {
// 获取段落对象
if (run.get(i) == null) { //段落为空跳过
continue;
}
String sectionItem = run.get(i).getText(run.get(i).getTextPosition()); //段落内容
// 遍历自定义表单关键字,替换Word文档中的内容
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
// 当前关键字
String key = iterator.next();
// 替换内容
sectionItem = sectionItem.replace(key, String.valueOf(map.get(key)));
}
run.get(i).setText(sectionItem, 0);
}
}
/**
* 替换表格中的指定文字
*/
//获取文档中所有的表格,每个表格是一个元素
Iterator<XWPFTable> itTable = document.getTablesIterator();
while (itTable.hasNext()) {
XWPFTable table = (XWPFTable) itTable.next(); //获取表格内容
int count = table.getNumberOfRows(); //表格的行数
//遍历表格行的对象
for (int i = 0; i < count; i++) {
XWPFTableRow row = table.getRow(i); //表格每行的内容
List<XWPFTableCell> cells = row.getTableCells(); //每个单元格的内容
//遍历表格的每行单元格对象
for (int j = 0; j < cells.size(); j++) {
XWPFTableCell cell = cells.get(j); //获取每个单元格的内容
List<XWPFParagraph> paragraphs = cell.getParagraphs(); //获取单元格里所有的段落
for (XWPFParagraph paragraph : paragraphs) {
//获取段落的内容
List<XWPFRun> run = paragraph.getRuns();
// 遍历段落文字对象
for (int o = 0; o < run.size(); o++) {
// 获取段落对象
if (run.get(o) == null || run.get(o).equals("")) {
continue;
}
String sectionItem = run.get(o).getText(run.get(o).getTextPosition()); //获取段落内容
if (sectionItem == null || sectionItem.equals("")) { //段落为空跳过
continue;
}
//遍历自定义表单关键字,替换Word文档中表格单元格的内容
for (String key : map.keySet()) {
// 替换内容
sectionItem = sectionItem.replace(key, String.valueOf(map.get(key)));
run.get(o).setText(sectionItem, 0);
}
}
}
}
}
}
FileOutputStream outStream = null;
outStream = new FileOutputStream(destPath);
document.write(outStream);
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//替换的内容,根据key为关键字指定替换成value的值
HashMap<String, Object> map = new HashMap<>();
map.put("${title}", "回复单");
map.put("${name}", "xx建筑有限公司");
map.put("${date}", "2021-12-30");
map.put("${data}", "财务部");
map.put("${mqdata}", "泉水项目部");
map.put("${text}", "remark info");
String srcPath = "D:\text.docx"; //模板文件的地址
String destPath = "D:\test2.docx"; //替换后保存的地址
searchAndReplace(srcPath, destPath, map);
}
}
模板
结果
最后
以上就是风中彩虹为你收集整理的java使用POI实现word模板替换导出的全部内容,希望文章能够帮你解决java使用POI实现word模板替换导出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复