Java库 学习笔记 - POI 在Word文档中查找指定关键字并设置背景色
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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文档中查找指定关键字并设置背景色的主要内容,如果未能解决你的问题,请参考以下文章