开发当中,很多时候我们会需要将我们的数据写入到Word当中,或者说导出。这时候我们会使用一些特定的标识来达到我们替换内容的目的。在Word中定义好我们需要替换的内容,也就是模板。然后再写入数据。源码如下:

package com.seawater.controller;import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.usermodel.*;import java.io.FileOutputStream;
import java.util.*;
import java.util.Map.Entry;
/*** Created by zhouhs on 2017/1/5.*/
public class DocWriter {public static void searchAndReplace(String srcPath, String destPath,Map<String, String> map) {try {XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(srcPath));/*** 替换段落中的指定文字*/Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();while (itPara.hasNext()) {XWPFParagraph paragraph = (XWPFParagraph) itPara.next();Set<String> set = map.keySet();Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String key = iterator.next();List<XWPFRun> run=paragraph.getRuns();for(int i=0;i<run.size();i++){if(run.get(i).getText(run.get(i).getTextPosition())!=null &&run.get(i).getText(run.get(i).getTextPosition()).equals(key)){/*** 参数0表示生成的文字是要从哪一个地方开始放置,设置文字从位置0开始* 就可以把原来的文字全部替换掉了*/run.get(i).setText(map.get(key),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 (XWPFTableCell cell : cells) {for (Entry<String, String> e : map.entrySet()) {if (cell.getText().equals(e.getKey())) {cell.removeParagraph(0);cell.setText(e.getValue());}}}}}FileOutputStream outStream = null;outStream = new FileOutputStream(destPath);document.write(outStream);outStream.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {Map<String, String> map = new HashMap<String, String>();map.put("${title}", "POI word export");map.put("${second}", "2");map.put("${name}", "seawater");map.put("${tel}", "0000-0000");map.put("${remark}", "remark info");String srcPath = "D:\\1.docx";String destPath = "D:\\2.doc";searchAndReplace(srcPath, destPath, map);}
}

1.docx文件中的内容:

2.doc文件结果:

需要注意的是在模板文件中(即1.docx)中我们定义的标识左右都需要加空格,否则可能会出现无法替换的情况。

POI方式替换Word中的文字相关推荐

  1. Word控件Spire.Doc 【文本】教程(14) ;如何用图片替换Word中的文字

    在 Spire.Doc 的教程部分,我们介绍了"用 C# 中的表格替换 Word 中的文本"和"用 C# 中的文本替换 Word 中的图像"的简单方法.有时,我 ...

  2. python替换word中的文字内容

    摘要:这篇文章介绍了如何使用python[3.6版本]把pdf文件转换为word文档并替换word文档中的文字内容,这里替换的规则是中英转换或者其它自定义规则 pdf转换为word pdf文件由于很难 ...

  3. VBS 从Excel中获取数据,批量替换word中的文字

    简介 比如我有一个需求,需要把一份 word 中的英文国家名全部替换成中文国家名,excel中的第一列是英文国家名,第二列是中文国家名.人工完成的话,费时费力,使用我编写的程序,双击一下,瞬间完成. ...

  4. 用python的win32com模块替换word中的文字搞定批量打印奖状

    六一将至,学校要表彰优秀同学,于是安排我去打印奖状.按照一般的情况,打印奖状都是打印个模板批量复印,然后手工填写名字,然后我们的校长特别叮嘱我说,名字也要用打印的,这样比较正式.看到获奖名单上的100 ...

  5. 批量自动替换word中的文字

    from docx import Document import xlrd #定义一个方法用来替换 def change_test(old_test,new_test): #替换所有的段落 all_p ...

  6. POI替换word中的指定文字(包含表格,表格中有回车)

    网上可以找到很多POI替换Word中指定文字的代码,然而基本上都没有对文档中的表格中包含的段落(回车)进行处理.自己写了,代码记录如下: /** * *@templetStream 文档的输入流 *@ ...

  7. Using POI to replace elements in WORD(.docx/.doc)(使用POI替换word中的特定字符/文字)【改进】...

    上一篇文章可能有点bug,这个是改进 package com.xfzx.test.POI.main;import java.io.File; import java.io.FileInputStrea ...

  8. python读取word文件并替换部分文字_python实现替换word中的关键文字(使用通配符)...

    环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于 ...

  9. word中表格文字不自动换行的方式

    word中表格文字不自动换行的方式 1.选中表格 2.表格工具->布局->对齐方式->单元格边距 3.将左右的边距改为0

最新文章

  1. 怎么用vc采集ni卡数据_智能水表读数怎么看?家用智能水表怎么安装?
  2. jvm--动态对象年龄判定
  3. 003 通过内存关系找万能按键call
  4. 图像压缩哪家强?请看这份超详细对比
  5. IE8下submit表单没反应
  6. Python趣味编程---Python也会讲笑话
  7. github 使用之--ssh配置(及解决ssh_add 报错)
  8. 【大数据】0002---MongoDB集群自动分离创建新集群
  9. SharePoint 2010遍历文档库中所有的文件,文件夹
  10. 使用matlab制作电子签名
  11. Excel 2013 查找和替换单元格内换行回车
  12. OpenCV:Knn算法
  13. 2019年培养工作室主力计划——第1次任务
  14. 计算机平均值的快捷键,excel求平均值快捷键
  15. 阿里云-钉钉-企业邮箱
  16. MATLAB 函数大全
  17. Notion:笔记协同工具,使用教程
  18. phpstorm+phpstudy调试thinkphp
  19. 《网络安全应急响应技术实战指南》知识点总结(第9章 数据泄露网络安全应急响应)
  20. Linux的文件特殊权限

热门文章

  1. BZOJ2424: [HAOI2010]订货
  2. DeblurGANv2翻译
  3. 深入探索面向对象事件(Delegate)机制
  4. 《文献管理与信息分析》慕课学习心得
  5. CorelDRAW程序cdr贝塞尔的应用技巧不得不学习一下
  6. EGE入门小游戏:字母游戏
  7. AlphaGo Zero ( 阿尔法元 ) 简介
  8. 红外线隧道炉到底好不好?
  9. 个人独立网站上线 http://www.16boke.com
  10. Qt使用教程:添加编译器(一)