代码
package com.nj.uu.base.component.poi;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <pre>
* WordFillUtil
* </pre>
*
* @author qhs
* @version 1.0
* @date 2020/09/11 13:00:37
*/
@Slf4j
public class WordFillUtil {
public static void main(String[] args) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
fillInTableMedian("d://a.docx", "d://b.docx", map);
}
/**
* 填充表格中值并生成文件
* <p>
* desc:
* <span>1.模板只支持docx格式<span/>
* <span>2.模板表格中单列只能填写标识key&&只能填写一个<span/>
* <p/>
*
* @param path word模板地址 填充值标识key ${key}(唯一)
* @param data 填充数据 key|value name=zhangsan
* @param outPath
*/
public static void fillInTableMedian(String path, String outPath, Map<String, Object> data) throws IOException {
//加载文件操作对象
try (FileInputStream is = new FileInputStream(path); XWPFDocument document = new XWPFDocument(is)) {
//获取文件表格
List<XWPFTable> tableList = document.getTables();
//遍历
for (XWPFTable xwpfTable : tableList) {
//行
for (XWPFTableRow xwpfTableRow : xwpfTable.getRows()) {
//列
for (XWPFTableCell xwpfTableCell : xwpfTableRow.getTableCells()) {
// cell text
String text = xwpfTableCell.getText();
//是否填充
if (isItFilled(text)) {
//段落
for (XWPFParagraph xwpfParagraph : xwpfTableCell.getParagraphs()) {
//获取段落中所有文本
List<XWPFRun> runs = xwpfParagraph.getRuns();
//clean 段落文本值
for (XWPFRun run : runs) {
run.setText("", 0);
}
//设置段落中文本
runs.get(0).setText(data.get(getKey(text)).toString());
}
}
}
}
}
//写出
try (FileOutputStream out = new FileOutputStream(outPath)) {
document.write(out);
}
}
}
/**
* 填充前缀
*/
private static final String FILL_PREFIX = "${";
/**
* 填充后缀
*/
private static final String FILL_SUFFIX = "}";
/**
* 是否填充
*
* @param text
* @return
*/
public static boolean isItFilled(String text) {
return text.contains(FILL_PREFIX);
}
/**
* 获取填充标识Key
*
* @param text
* @return
*/
public static String getKey(String text) {
return text.replace(FILL_PREFIX, "").replace(FILL_SUFFIX, "");
}
}
模板示例
运行示例