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文档中查找指定关键字并设置背景色的主要内容,如果未能解决你的问题,请参考以下文章

有没有简单一点的Java库,用来生成word文档

java通过freemarket生成word文档

java用poi生成word文档,并且给word文档中的中文设置字体,我测试只能改英文字体?

使用Java POI来选择提取Word文档中的表格信息

关于poi读和写word文档

java用poi导出word文档,我要导出一个表格,表格的单元格中还要有一个表格,请问怎么实现