Java库 学习笔记 - POI 在Word文档中查找指定关键字并设置背景色
随手测试,有空再研究。
<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文档中查找指定关键字并设置背景色相关推荐
- POI对word文档中的指定内容添加批注
public static void main(String[] args) throws Exception {InputStream is = new FileInputStream(new Fi ...
- java利用POI替换word文档中的标签
java利用POI替换word文档中的标签 <dependency><groupId>org.apache.poi</groupId><artifactId& ...
- 计算机给文字填充颜色,如何将电脑word文档中新录入的文字设置为不同的颜色...
如何将电脑word文档中新录入的文字设置为不同的颜色 腾讯视频/爱奇艺/优酷/外卖 充值4折起 当我们在使用电脑的时候,一般都会用到word软件来处理文档,如果想要将新录入的文字设置为与旧文字不同的颜 ...
- word文档分节符如何删除_如何在Word文档中查找分节符
word文档分节符如何删除 Section breaks in Word allow you to break up your document into sections and format ea ...
- java poi在word文档中插入图片后文件无法打开
错误情况 POI生成的word文档包含图片时用office打开失败,提示错误.但是用wps却可以打开. 原因分析 这是因为poi本身的问题,单纯的插入图片是不显示的,可以使用如下处理方式createP ...
- php 文档转html格式文件,php学习笔记之将word文档转化为HTML文件
将word文档转化为HTML文件 function wordTohtml($wfilepath) { $word=new COM("Word.Application") or di ...
- java word 纸张大小_如何在Java中为Word文档(.doc或.docx)设置背景色(页面颜色)?...
通过诸如http://poi.apache.org之类的某些库,我们可以创建具有任何文本颜色的 Word文档 ,但是对于文本的 背景 或突出显示,我没有找到任何解决方案. 页面颜色以手动方式显示!: ...
- 对Word文档中的指定内容进行替换
不知大家在对Word操作时,有没有遇到需要对指定内容进行替换这种需求.前几天公司有个需求,就是对PDF邀请函的姓名那部分内容进行替换,因为本人以前对Word的书签有过操作,所以思路就是通过将这部分内容 ...
- Word文档中最规范页面设置如何设置
自动转换工具:https://app.xunjiepdf.com/ 1.用Word文档打开我们要设置的公文,打开后查看菜单工具栏中的页面设置标签,点击,我们会发现有页边距.纸张大小等等设置. 点击下拉 ...
- word文档中的装订线怎么设置_如何在WORD中制作装订线
如何用 Word 制作试卷"卷头"含密封装订线 Word 是个功能强大的字处理软件, 许多功能能够收到令人意想不到的效果, 尤其是巧妙的运用一些命 令能够达到令其他软件望尖莫及的地 ...
最新文章
- 乐视云监控数据存放到influxdb中
- svn中出现各种感叹号说明
- “面试不败计划”:集合、日期、异常、序列化、jvm、其他
- Swift之本地国际化与App内切换语言
- Android权限之动态权限
- 不仅是人类的shooow
- 【转】Android - 文件读写操作 总结
- ajax获取session值_java程序员你真的了解session与cookie吗?
- MySQL 5.6 dump/load buffer pool实验
- 指令 出厂_CNC数控加工中心编程指令详解
- 最实用的Windows安全加固手册
- 【懒人必备神器】教你用Python做一个自动抽奖程序啦~
- 1000道最新大厂高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构
- 豆瓣9.8,它凭「少儿不宜」吊打所有美剧!脑洞大开必看神作!【内附资源】...
- 每天读论语《论语·学而》01
- 万字详解整个数据仓库设计体系
- acwing280.陪审团 01背包
- 【DirectX 12】在Win10 10074上开启DirectX 12的调试功能
- C语言的语句与程序的基本结构
- 0-1背包问题小总结(hdu 2062)