当前位置:   article > 正文

Java操作word指定位置插入数据_java 在word文档中的特定字符后插入内容

java 在word文档中的特定字符后插入内容

需求背景:因项目需要无法使用poi-tl包利用{{}}定位的方式向word模板的指定位置填写信息
解决方法:现利用替换占位字段的方式,在要替换的地方前后都插入书签
示例word:
在需要替换填写内容的地方放置占位标识并在该标识前后添加书签
在这里插入图片描述

代码示例:

  1. /**
  2. * @author YongXin
  3. * @date Created in 2022/7/18 20:57
  4. */
  5. public class InsertWordTest {
  6. public static void main(String[] args) throws IOException {
  7. Map<String,String> map = new HashMap<>();
  8. map.put("mj","内部");
  9. map.put("dept","办公室");
  10. map.put("b","小明,小红");
  11. map.put("h","董事会");
  12. insertAndOutFile("C:/Users/96522/Desktop/template.docx","C:/Users/96522/Desktop/out.docx",map);
  13. }
  14. /**
  15. *将word中某些标签替换成指定的值,并生成一个新的word文档。
  16. * @param templateFilePath word模板文件路径
  17. * @param outFilePath 填充后输出文件路径
  18. * @param map key:word中的占位标签,value对应标签要替换的值。
  19. * @throws IOException
  20. */
  21. public static void insertAndOutFile(String templateFilePath, String outFilePath, Map<String,String> map) throws IOException {
  22. //准备工作,生成docx对象
  23. String templatePath=templateFilePath;
  24. InputStream is=new FileInputStream(templatePath);
  25. XWPFDocument docx=new XWPFDocument(is);
  26. //获取表格
  27. List<XWPFTable> tables=docx.getTables();
  28. //定位到第一个表格
  29. XWPFTable table=tables.get(0);
  30. //遍历该表格所有的行
  31. for(int i=0;i<table.getRows().size();i++) {
  32. XWPFTableRow row=table.getRow(i);
  33. //遍历该行所有的列
  34. for(int j=0;j<row.getTableCells().size();j++) {
  35. XWPFTableCell cell=row.getTableCells().get(j);
  36. //获取该格子里所有的段
  37. List<XWPFParagraph> paragraphs=cell.getParagraphs();
  38. for(XWPFParagraph p:paragraphs) {
  39. //遍历该格子里的段
  40. List<XWPFRun> runs=p.getRuns();
  41. for(XWPFRun run:runs) {
  42. //遍历该段里的所有文本
  43. String str=run.toString();
  44. //如果该段文本包含map中的key,则替换为map中的value值。
  45. Set<String> keySet = map.keySet();
  46. for(String key:keySet){
  47. if(str.trim().equals(key)){
  48. //替换该文本0位置的数据。
  49. run.setText(map.get(key),0);
  50. }
  51. }
  52. }
  53. }
  54. }
  55. }
  56. //输出
  57. OutputStream os=new FileOutputStream(outFilePath);
  58. docx.write(os);
  59. is.close();
  60. os.close();
  61. }
  62. }

依赖:

  1. <dependencies>
  2. <!-- word工具 -->
  3. <dependency>
  4. <groupId>org.apache.poi</groupId>
  5. <artifactId>poi-ooxml</artifactId>
  6. <version>3.17</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.apache.poi</groupId>
  10. <artifactId>poi-ooxml-schemas</artifactId>
  11. <version>3.17</version>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.apache.poi</groupId>
  15. <artifactId>poi</artifactId>
  16. <version>3.17</version>
  17. </dependency>
  18. </dependencies>

结果:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/815339
推荐阅读
相关标签
  

闽ICP备14008679号