随手测试,有空再研究。

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.8</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.8</version></dependency>

思路:逐个遍历所有段落,将其拆分为3部分。
关键字之前的文字 + 关键字 + 关键字之后的文字。
然后对关键字对象进行替换设置。
最后再把三部分拼回去。(相当于替换掉了原来的段落)
如果有多个关键字,可以考虑段落.split(关键字)

package com.excel.demo;import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;public class WOo {public static void main(String[] args) {File file = new File("C:\\test.docx");String str = "";try {FileInputStream fis = new FileInputStream(file);XWPFDocument xdoc = new XWPFDocument(fis);// XWPFWordExtractor extractor = new XWPFWordExtractor(xdoc);String sourceStr = "原字符串";String targetStr = "替换为字符串";String targetColor = "ff0000";        // 红字String targetBgColor = "ffff00";    // 黄底for (int i = 0; i < xdoc.getParagraphs().size(); i++) {XWPFParagraph xwpfParagraph = xdoc.getParagraphs().get(i);if(xwpfParagraph.getText().contains(sourceStr)) {// 取出纯文本String text = xwpfParagraph.getText();// ---------- 拆分段落为:前,关键字,后 三个run ----------String begin = text.substring(0, text.indexOf(sourceStr));                   // 取出段落中关键字之前的内容String end = text.substring(text.indexOf(sourceStr) + sourceStr.length);  // 取出段落中关键字之后的内容XWPFRun run = xwpfParagraph.getRuns().get(0).getParagraph().createRun();   // 创建 run 用来替换原内容// 替换文字run.setColor(targetColor);  // 文字颜色run.setText(targetStr);      // 文字内容run.setBold(true);           // 设置加粗// 设置背景色CTShd cTShd = run.getCTR().addNewRPr().addNewShd(); // 向run中添加一个 cTShd,应该就是对应vba中的shading对象cTShd.setVal(STShd.CLEAR);cTShd.setColor("auto");       cTShd.setFill(targetBgColor);// ---------- 拼回段落 ----------xwpfParagraph.getRuns().get(0).getParagraph().createRun().setText(begin);xwpfParagraph.getRuns().get(0).getParagraph().addRun(run);       xwpfParagraph.getRuns().get(0).getParagraph().createRun().setText(end);xwpfParagraph.getRuns().get(0).getParagraph().removeRun(0);break;}}OutputStream os= new FileOutputStream("C:\\test2.docx");xdoc.write(os);fis.close();} catch (Exception e) {e.printStackTrace();}}
}

参考资料

简书:Apache POI自动生成Word文档(带目录)
Apache POI - Javadocs
org.apache.poi.xwpf.usermodel.XWPFParagraph
org.apache.poi.xwpf.usermodel.XWPFRun

Java库 学习笔记 - POI 在Word文档中查找指定关键字并设置背景色相关推荐

  1. POI对word文档中的指定内容添加批注

    public static void main(String[] args) throws Exception {InputStream is = new FileInputStream(new Fi ...

  2. java利用POI替换word文档中的标签

    java利用POI替换word文档中的标签 <dependency><groupId>org.apache.poi</groupId><artifactId& ...

  3. 计算机给文字填充颜色,如何将电脑word文档中新录入的文字设置为不同的颜色...

    如何将电脑word文档中新录入的文字设置为不同的颜色 腾讯视频/爱奇艺/优酷/外卖 充值4折起 当我们在使用电脑的时候,一般都会用到word软件来处理文档,如果想要将新录入的文字设置为与旧文字不同的颜 ...

  4. word文档分节符如何删除_如何在Word文档中查找分节符

    word文档分节符如何删除 Section breaks in Word allow you to break up your document into sections and format ea ...

  5. java poi在word文档中插入图片后文件无法打开

    错误情况 POI生成的word文档包含图片时用office打开失败,提示错误.但是用wps却可以打开. 原因分析 这是因为poi本身的问题,单纯的插入图片是不显示的,可以使用如下处理方式createP ...

  6. php 文档转html格式文件,php学习笔记之将word文档转化为HTML文件

    将word文档转化为HTML文件 function wordTohtml($wfilepath) { $word=new COM("Word.Application") or di ...

  7. java word 纸张大小_如何在Java中为Word文档(.doc或.docx)设置背景色(页面颜色)?...

    通过诸如http://poi.apache.org之类的某些库,我们可以创建具有任何文本颜色的 Word文档 ,但是对于文本的 背景 或突出显示,我没有找到任何解决方案. 页面颜色以手动方式显示!: ...

  8. 对Word文档中的指定内容进行替换

    不知大家在对Word操作时,有没有遇到需要对指定内容进行替换这种需求.前几天公司有个需求,就是对PDF邀请函的姓名那部分内容进行替换,因为本人以前对Word的书签有过操作,所以思路就是通过将这部分内容 ...

  9. Word文档中最规范页面设置如何设置

    自动转换工具:https://app.xunjiepdf.com/ 1.用Word文档打开我们要设置的公文,打开后查看菜单工具栏中的页面设置标签,点击,我们会发现有页边距.纸张大小等等设置. 点击下拉 ...

  10. word文档中的装订线怎么设置_如何在WORD中制作装订线

    如何用 Word 制作试卷"卷头"含密封装订线 Word 是个功能强大的字处理软件, 许多功能能够收到令人意想不到的效果, 尤其是巧妙的运用一些命 令能够达到令其他软件望尖莫及的地 ...

最新文章

  1. 乐视云监控数据存放到influxdb中
  2. svn中出现各种感叹号说明
  3. “面试不败计划”:集合、日期、异常、序列化、jvm、其他
  4. Swift之本地国际化与App内切换语言
  5. Android权限之动态权限
  6. 不仅是人类的shooow
  7. 【转】Android - 文件读写操作 总结
  8. ajax获取session值_java程序员你真的了解session与cookie吗?
  9. MySQL 5.6 dump/load buffer pool实验
  10. 指令 出厂_CNC数控加工中心编程指令详解
  11. 最实用的Windows安全加固手册
  12. 【懒人必备神器】教你用Python做一个自动抽奖程序啦~
  13. 1000道最新大厂高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构
  14. 豆瓣9.8,它凭「少儿不宜」吊打所有美剧!脑洞大开必看神作!【内附资源】...
  15. 每天读论语《论语·学而》01
  16. 万字详解整个数据仓库设计体系
  17. acwing280.陪审团 01背包
  18. 【DirectX 12】在Win10 10074上开启DirectX 12的调试功能
  19. C语言的语句与程序的基本结构
  20. 0-1背包问题小总结(hdu 2062)

热门文章

  1. C语言编写FFT程序
  2. 刷吉米多维奇系列小结(一)
  3. 计算机三级 数据库技术 学习笔记
  4. 高性能Mysql(第三版)
  5. 校园表白墙网站源码 带网站后台
  6. Windows 10中无需禁用强制驱动签名检测加载驱动
  7. scjp第一章学习总结
  8. 修改VS2017密钥
  9. 为什么登录MySQL会闪退_MySql登录时闪退的快速解决办法
  10. oppo9s刷机教程_OPPOR9S刷机包