此功能需要在spring boot环境
一、引入依赖
详情请查看:https://blog.csdn.net/weixin_45061924/article/details/128251786
二、实现
2.1 设置测试文档
在要填写内容的单元格内使用占位符,然后使用replace()替换所有的占位符。
2.2 具体方法:
- 创建文档对象并使用loadFromFile()方法加载文档
- 使用HashMap存储占位符(键)和要替换的内容(值)
- 使用正则表达式,匹配所有的占位符 ${},根据正则表达式获取所有文本
- 逐个替换占位符
2.3 相关代码
public void ReplaceText() {
//创建文档对象并加载文档
Document doc = new Document();
doc.loadFromFile("D:\\桌面\\text.docx", FileFormat.Docx);
//使用HashMap存储占位符(键)和要替换的内容(值)
Map<String, String> map = new HashMap<>();
map.put("${name}", "张三");
map.put("${sex}", "男");
map.put("${birthday}","2022.12");
map.put("${id}","333777111111112222");
replaceSpecialWord(doc, map);
// 保存为文件
doc.saveToFile("D:\\桌面\\text(1).docx", FileFormat.Docx);
// 或者保存至输出流中
//ByteArrayOutputStream os = new ByteArrayOutputStream();
//doc.saveToStream(os, FileFormat.Docx);
}
/**
* 替换Word文件中 ${} 标识的特殊字符
* <strong>注意:如果存在部分特殊表示无法替换,请尝试将 ${} 的整个字符串复制到word中,有可能word没有将${}识别为一个整体</strong>
* @param doc: Sprire Document
* @param map: 占位符${} 与 需要替换的为字符串的对应关系
*/
public void replaceSpecialWord(Document doc, Map<String, String> map) {
// 正则表达式,匹配所有的占位符 ${}
Pattern pattern = Pattern.compile("\\$\\{.*?}");
// 根据正则表达式获取所有文本
TextSelection[] allPattern = doc.findAllPattern(pattern);
// 逐个替换占位符
for (TextSelection textSelection : allPattern) {
String tmp = map.get(textSelection.getSelectedText());
System.out.print(textSelection.getSelectedText());
int res = doc.replace(textSelection.getSelectedText(), tmp, true, true);
System.out.println(": " + res);
}
}