Java 解析Excel单元格的富文本

news2024/10/8 16:50:25

1. 总体介绍

  1. 该方法是解析 xlsx 单元格中的富文本,注意不是 xlsxls 的 api 不一样,试了很久没成功。
  2. 只实现了解析 斜体字上下标,其它的实现方式应该类似。

2. 具体实现

2.1 代码

package util;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelItalic {
	
	public static void cell(XSSFCell cell) {
		
		XSSFRichTextString rts = cell.getRichStringCellValue();
		String value = rts.getString();
		
		int size = rts.numFormattingRuns();// 该富文本使用的格式的数量
		
		for (int i = 0; i < size; i++) {
			
			XSSFFont font = rts.getFontOfFormattingRun(i);// 该格式对应的字体
			if (font == null) {
				continue;
			}
			
			// 斜体
			if (font.getItalic()) {// 字体是斜体
				int start = rts.getIndexOfFormattingRun(i);// 该格式在该富文本的起始位置索引
				int length = rts.getLengthOfFormattingRun(i);// 该格式在该富文本覆盖的字符长度
				if (length > 0) {
					System.out.println("斜体内容为:" + value.substring(start, start + length));
				}
			}
			
			short tos = font.getTypeOffset();
			// 上标
			if (Font.SS_SUPER == tos) {
				int start = rts.getIndexOfFormattingRun(i);// 该格式在该富文本的起始位置索引
				int length = rts.getLengthOfFormattingRun(i);// 该格式在该富文本覆盖的字符长度
				if (length > 0) {
					System.out.println("上标内容为:" + value.substring(start, start + length));
				}
			}
			
			// 下标
			if (Font.SS_SUB == tos) {
				int start = rts.getIndexOfFormattingRun(i);// 该格式在该富文本的起始位置索引
				int length = rts.getLengthOfFormattingRun(i);// 该格式在该富文本覆盖的字符长度
				if (length > 0) {
					System.out.println("下标内容为:" + value.substring(start, start + length));
				}
			}
			
		}
		
	}
	
	public static void wb(String path) {
		
		XSSFWorkbook wb = null;
		InputStream input = null;
		
		try {
			input = new FileInputStream(path);
			wb = new XSSFWorkbook(input);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (input != null) {
				try {
					input.close();
				} catch (IOException e) {
				}
			}
		}
		
		XSSFSheet sheet = wb.getSheetAt(0);
		
		for (int i = 0; i <= sheet.getLastRowNum(); i++) {
			System.out.println("\n-----第" + (i + 1) + "行-----");
			XSSFRow row = sheet.getRow(i);
			for(int j = 0; j < row.getLastCellNum(); j++){
				cell(row.getCell(j));
			}
		}
		
	}
	
	public static void main(String[] args) {
		wb("D:\\test\\1.xlsx");
	}
	
}

2.2 依赖

		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi</artifactId>
		    <version>3.12</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml</artifactId>
		    <version>3.12</version>
		</dependency>

2.3 excel内容

在这里插入图片描述

2.4 输出


-----第1行-----
斜体内容为:猛虎
斜体内容为:蔷薇

-----第2行-----
上标内容为:-2

-----第3行-----
斜体内容为:U
斜体内容为:k

-----第4行-----
斜体内容为:U
斜体内容为:rel
下标内容为:rel
斜体内容为:k

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/822329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式一开始该怎么学?学习单片机

学习单片机&#xff1a; 模电数电肯定必须的&#xff0c;玩单片机大概率这两门课都学过&#xff0c;学过微机原理更好。 直接看野火的文档&#xff0c;芯片手册&#xff0c;外设手册。 学单片机不要纠结于某个型号&#xff0c;我认为stm32就OK&#xff0c;主要是原理和感觉。…

【ZYNQ】Linux驱动之梦开始的地方

软件版本&#xff1a;Vivado2021.1 操作系统&#xff1a;WIN10 64bit、Ubuntu18.04 硬件平台&#xff1a;ZYNQ UltraScale 文章目录 1.1系统框图1.2介绍1.2.1寄存器查询手册1.2.2物理地址与虚拟地址1.2.3MIO介绍1.2.4PS的LED 引脚介绍 1.3搭建工程1.4程序分析1.4.1驱动程序分析…

edgeConnector新版兼容ARM-为用户提供更多部署方案

Softing工业自动化的edgeConnector产品新版3.50兼容ARM处理器——大大扩展了edgeConnector产品的应用范围。 &#xff08;edgeConnector新版兼容ARM——为用户提供更多部署方案&#xff09; Softing edgeConnector产品系列是基于Docker的软件应用&#xff0c;可访问SIMATIC S7、…

QT 在label上透明绘图

一、新建TransparentDemo工程 二、在界面上添加label&#xff0c;修改样式表&#xff0c;将底色置为红色&#xff0c;作为北京 三、新建一个TransparentLabel类&#xff0c;继承自QLabel 此时&#xff0c;工程包括文件 五、在transparentlabel.h中添加 头文件 #include …

静态分析全解析:助力高质量软件开发,降低成本风险

按时发布高质量版本、需要满足编码和合规标准&#xff0c;而且决不能出现错误……静态分析为那些面临巨大压力的队伍提供了帮助。 这就是为什么开发团队都在使用静态分析/源代码分析工具。本篇文章将讨论静态分析、使用静态代码分析器的优势&#xff0c;以及静态分析的局限性。…

MySQL语法

Mysql通用语法 SQL可多行书写&#xff0c;分号结尾SQL语句可以使用空格进行缩进&#xff0c;增加可读性MYSQL&#xff0c;不区分大小写&#xff0c;但关键字推荐使用大写注释&#xff1a; 单行注释&#xff1a;--注释内容 或#注释内容 多行注释&#xff1a;/*注释内容*/ SQ…

声音从何而来?如何保护自己免受聊天工具中欺诈性语音邮件的侵害?

&#x1f5e3; 并不是每个人都喜欢在信使上收到语音邮件。 如果它们也是骗子发来的&#xff0c;那就更令人不快了。 让我们来看看攻击者都会使用哪些手段吧 社交工程 骗子可以使用语音信息而不是电话来散布虚假信息&#xff0c;例如&#xff0c;以银行的名义散布有关账户问…

windows下的txt文档,传到ubuntu后,每行后面出现^M,怎么处理?

问题背景&#xff1a;windows下pycharm生成的txt文档&#xff0c;传到ubuntu后&#xff0c;每行后面出现^M 用vim打开显示 使用cat -A filename显示如下 参考https://www.lmlphp.com/user/16697/article/item/579325/给出的几种方法 方法一、dos2unix filename。服务器没装…

《网络是怎样连接的》(二.2)

(6条消息) 《网络是怎样连接的》&#xff08;二.1&#xff09;_qq_38480311的博客-CSDN博客 本文主要取材于 《网络是怎样连接的》 第二章 2.5 2.6章节。 目录 简述&#xff1a; 本文的主要内容是 以太网的收发操作 和 UDP协议的收发操作。 IP与以太网的包收发操作 包是什…

百分点科技参编信通院《数据中台实践指南(1.0版)》

日前&#xff0c;在大数据产业发展大会上&#xff0c;百分点科技参与编写的《数据中台实践指南&#xff08;1.0版&#xff09;》正式发布&#xff0c;该指南由中国信息通信研究院大数据技术标准推进委员会指导和组织&#xff0c;百分点科技、阿里云、中国移动、中国联通、交通银…

如何为新一代可持续应用设计电机编码器

从定速电机转向提供位置和电流反馈的变速电机&#xff0c;不仅可以实现工艺改进&#xff0c;还能节省大量能源。本文介绍了电机编码器&#xff08;位置和速度&#xff09;、器件类型和技术以及应用案例。此外还解答了一些关键问题&#xff0c;例如对特定系统最重要的编码器性能…

Denso Create Programming Contest 2023 (AtCoder Beginner Contest 309) F题解

文章目录 [Box in Box](https://atcoder.jp/contests/abc309/tasks/abc309_f)问题建模问题分析1.分析操作2.如何比较长方体判断是否有满足条件的长方体存在3.方法1使用树状数组来维护1~对应二维属性值区间内的最小三维属性值代码 4.方法2使用线段树来维护1~对应二维属性值区间内…

2021年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

四、写作&#xff1a;第56~57小题&#xff0c;共65分。其中论证有效性分析30分&#xff0c;论说文35分。请答在答题纸相应的位置上。 56.论证有效性分析&#xff1a;分析下述论证中存在的缺陷与漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对该…

基于Java+SpringBoot+Vue前后端分离电商项目

晚间lucky为友友们送福利啦~&#x1f381; Tips&#xff1a;有需要毕业设计指导的童鞋一定要认真看哦&#xff0c;文末有彩蛋。 一.项目介绍 该电商项目是一个简单、入门级的电商项目&#xff0c;是基于JavaSpringBootVue前后端分离项目。前端采用两套独立的系统分别完成项目…

驱动开发(中断)

头文件&#xff1a; #ifndef __LED_H__ #define __LED_H__#define PHY_LED1_MODER 0X50006000 #define PHY_LED1_ODR 0X50006014 #define PHY_LED1_RCC 0X50000A28#define PHY_LED2_MODER 0X50007000 #define PHY_LED2_ODR 0X50007014 #define PHY_LED2_RCC 0X50000A28#def…

java学习路程之篇六、进阶知识、常用API、Arrays工具类、冒泡排序、选择排序、二分查找、正则表达式

文章目录 1、Arrays工具类2、冒泡排序3、选择排序4、二分查找5、正则表达式 1、Arrays工具类 2、冒泡排序 3、选择排序 4、二分查找 5、正则表达式

抖音引流推广的几个方法,抖音全自动引流脚本软件详细使用教学

大家好我是你们的小编一辞脚本&#xff0c;今天给大家分享新的知识&#xff0c;很开心可以在CSDN平台分享知识给大家,很多伙伴看不到代码我先录制一下视频 在给大家做代码&#xff0c;给大家分享一下抖音引流脚本的知识和视频演示 不懂的小伙伴可以认真看一下&#xff0c;我们…

快速搭建Vue项目

1.安装node环境 下载地址为&#xff1a;https://nodejs.org/en/ 注意node版本问题&#xff0c;有很多情况下是node版本问题导致的错误。 2.安装淘宝镜像cnpm 为了提高我们的效率&#xff0c;可以使用淘宝的镜像&#xff1a;http://npm.taobao.org/ npm install cnpm -g --r…

【Redis】内存数据库Redis进阶(搭建各种集群)

目录 单机安装Redis搭建Redis主从集群搭建Redis哨兵集群 基于 CentOS 7 的 Redis 集群 单机安装Redis 安装 Redis 所需要的依赖&#xff1a; yum install -y gcc tcl将 Redis 安装包&#xff08;redis-6.2.4.tar.gz&#xff09;上传到任意目录 解压缩&#xff1a; tar -xzf …

如何过一个高质量的周末?

如何过一个高质量的周末&#xff1f; &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&#xff01;&#x1…