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

本文介绍了使用Apache POI库操作Word文档,通过遍历段落,实现关键字替换并设置特定格式,如更改颜色和背景。重点在于展示如何利用XWPFParagraph和XWPFRun来实现段落拆分和内容重构。
摘要由CSDN通过智能技术生成

随手测试,有空再研究。

<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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值