如何自动从Word表格中提取高亮(不同颜色)文本--Java实现

2022-05-25 00:00:00 提取 表格 不同颜色

文章目录

  • 问题情境
  • 相关jar包
  • Java实现程序

Email:1563178220@qq.com 内容可能有不到之处,欢迎交流。

未经本人允许禁止转载

问题情境

在word中存在多个表格,每个表格会有一些使用不同颜色标注的高亮文本,那么如何利用编程语言自动的提出这些高亮文本呢?这便是本文的问题情境,针对此,我使用Java实现了这一功能。
《如何自动从Word表格中提取高亮(不同颜色)文本--Java实现》

针对上面,这个表格(只匹配表格中的红色、黄色、蓝色、绿色对应的文本),Java程序的输出结果为:
《如何自动从Word表格中提取高亮(不同颜色)文本--Java实现》
处理时,这里不考虑表格的表头。

相关jar包

使用maven可以配置相关jar包,具体如下:

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.17</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.17</version>
		</dependency>

同时,还需要下载poi-scratchpad-3.17.jar:

《如何自动从Word表格中提取高亮(不同颜色)文本--Java实现》

Java实现程序

package com.qian.word;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

public class WordRead { 
	public static void main(String[] args) throws IOException { 
		//设置要匹配的颜色--16进制颜色代码
		String[] colors = { "FF0000", //红色
				"FFFF00", //黄色
				"0000FF", //蓝色
				"00FF00" //绿色
				};
		
		InputStream in = new FileInputStream("data/wordtext.docx"); //docx文件
		@SuppressWarnings("resource")
		XWPFDocument xdoc = new XWPFDocument(in);
		Iterator<XWPFTable> itTable = xdoc.getTablesIterator();  //获取word文件中的表格
		XWPFTable table;
		int tableIndex = 0; //表格编号
		System.out.println("表格编号" + "\t" +  "行" + "\t" + "列" + "\t" + "文本" + "\t" + "高亮颜色"  + "\t");
		while (itTable.hasNext()) {   //循环word中的每个表格
			tableIndex++;
			table = itTable.next();
			XWPFTableRow row;
			List<XWPFTableCell> cells;
			for (int i = 0; i < table.getNumberOfRows(); i++) { 
				if(i == 0)  //这里设置是否包含表头
					continue;
				row = table.getRow(i);  //获取word表格的每一行
				cells = row.getTableCells();  //针对每一行的所有单元格
				for (int j = 0; j < cells.size(); j++) { 
					XWPFTableCell cell = cells.get(j); //获取单个单元格
					//获取单元格相同字体颜色+文字
					XWPFParagraph paras = cell.getParagraphs().get(0); //获取包含段落的列表--只有一段
					List<XWPFRun> runsLists = paras.getRuns();//获取段落中的列表
					for(XWPFRun xL:runsLists){ 
						String c = xL.getColor(); 
						String text = xL.text(); 
						if (c!=null&&Arrays.asList(colors).contains(c)) { 
							System.out.println(tableIndex + "\t" + i + "\t" + j + "\t" + text + "\t" + c  + "\t");
						}
					}
				}
			}
		}
	}
}

    原文作者:HFUT_qianyang
    原文地址: https://blog.csdn.net/qy20115549/article/details/108907828
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章