Java 解析Excel单元格的富文本

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac 终端快捷键设置:如何给 Mac 中的 Terminal 设置 Ctrl+Alt+T 快捷键快速启动

Mac 电脑中正常是没有直接打开终端命令行的快捷键指令的&#xff0c;但可以通过 commandspace 打开聚焦搜索&#xff0c;然后输入 ter 或者 terminal 全拼打开。但习惯了 linux 的同学会觉得这个操作很别扭。于是我们希望能通过键盘按键直接打开。 操作流程如下&#xff1a; 1…

ChatGPT在法律行业的市场潜力

​ChatGPT现在已经成为我们的文字生成辅助工具、搜索引擎助手&#xff0c;许多体验过它的朋友会发现对它越来越依赖&#xff0c;并将其逐渐融入到自己的日常工作、生活。但有一点值得注意&#xff1a;这种人工智能除了技术可行、经济价值可行还要与相关规范即人类普遍的价值观念…

Blazor前后端框架Known-V1.2.9

V1.2.9 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazor…

DHCP地址池耗尽攻击

1&#xff09; 攻击DHCP服务器&#xff1a;频繁的发送伪装DHCP请求&#xff0c;直到将DHCP地址池资源耗尽防御&#xff1a;在交换机&#xff08;管理型&#xff09;的端口上做动态MAC地址绑定 2&#xff09; 伪装DHCP服务器攻击&#xff1a;hack通过将自己部署为DHCP服务器&…

【git技巧】什么是 .gitkeep

.gitkeep 文件的作用 就是——使 Git 保留一个空文件夹&#xff01; Git 是一个文件追踪系统&#xff0c;这也导致了 Git 的设计初衷是对文件进行追踪&#xff0c;所以&#xff0c;Git 不会追踪一个空目录。 但是&#xff0c;在某些情况下&#xff0c;我们确实是需要保留一些…

SSD 之乱七八糟的概念

1. 性能指标有哪些&#xff1f;分别是什么意思&#xff1f; 硬盘性能指标一般包括 IOPS&#xff08;反映的是随机读写性能&#xff09;、吞吐量&#xff08;也称为带宽&#xff0c;反映的是顺序读写性能&#xff09;、Response Time / Latency&#xff08;响应时间 / 时延&…

快手头部主播合体,二驴祁天道直播首秀销售额破亿

2023年刚刚过半&#xff0c;直播江湖突然生变。 快手头部娱乐主播「二驴」与快手户外主播第一人「祁天道」宣布“合体”&#xff0c;两者加总的粉丝量接近1亿&#xff0c;又一个“超级网红IP”诞生。 ▲图源&#xff1a;二驴的、祁天道快手截图 从白手起家的草根&#xff0c;…

机器学习 | Python实现NARX模型预测控制

机器学习 | Python实现NARX模型预测控制 目录 机器学习 | Python实现NARX模型预测控制效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 机器学习 | Python实现NARX模型预测控制 研究内容 贝叶斯黑盒模型预测控制,基于具有外源输入的非线性自回归模型的预期自由能最…

arm neon/fpu/mfloat

neon官网介绍: Arm Neon technology is an advanced Single Instruction Multiple Data (SIMD) architecture extension for the A-profile and R-profile processors. Neon technology is a packed SIMD architecture. Neon registers are considered as vectors of elements …

UniPro助力金融企业数字化转型 强化项目协作与跟踪

根据一份来自Standish Group的研究报告&#xff08;"CHAOS Report"&#xff09;&#xff0c;该报告对美国各行业的项目进行了调查&#xff0c;结果显示仅有不到一半&#xff08;约44%&#xff09;的项目能够成功按时完成&#xff0c;并达到预期的业务目标。其中&…

支持中文创成式填充 AI版PS 2023 v25.0安装教程

抖音保姆级视频教程: https://v.douyin.com/iJdUjg2o/ PS 2023 v25.0安装包地址&#xff1a; 链接: https://pan.baidu.com/s/1PXgVHDHdMIRcDzV4IfGAQw?pwd2023 提取码: 2023 如有疑问请加交流请加QQ群&#xff1a;814894746 安装教程总结&#xff1a; 卸载之前的PS beta版…

GPTCache 悬赏令!寻找最佳捉虫猎手,豪华赏格等你来拿!

号外号外&#xff01;GPTCache 全宇宙寻找最佳捉虫猎手&#xff01;捉虫数量越多&#xff0c;奖品越丰厚&#xff01; GPTCache 是为 AIGC 应用搭建的全新缓存&#xff0c;典型的应用场景是大模型&#xff0c;它采用语义缓存技术&#xff0c;能够存储 LLM 响应&#xff0c;从而…

关于Linux启动后eth0网卡起不来的问题

1./etc/udev/rules.d/70-persistent-net.rules 先到这个文件中 将eth0注掉 ## 同时记录ADDR 2.mv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth2 注意这个eth2, 要和第一步的号码对应 同时进入文件,将设备和ADDR修改 3.重启网络 servi…

既要增长又要人效,零售人准备好接受老板的灵魂拷问了吗

增长对于零售行业尤其中小规模的玩家来说重要性不言而喻&#xff0c;而支撑持续增长的引擎之一就是对日常运营数据能随时进行快速、合理的解读&#xff0c;从而在瞬息万变的市场环境和有限的时间窗口内&#xff0c;根据指标背后折射的问题及时调整市场投放和客户关系维护等策略…

​​​amoeba实现MySQL读写分离

​​​amoeba实现MySQL读写分离 准备环境&#xff1a;主机A和主机B作主从配置&#xff0c;IP地址为192.168.131.129和192.168.131.130&#xff0c;主机C作为中间件&#xff0c;也就是作为代理服务器&#xff0c;IP地址为192.168.131.136。三台服务器操作系统为RHEL6.4 x86_64,为…

提升开发效率,Lombok的链式编程和构建模式

目录 链式编程 定义 代码示例 ​编辑 Accessors(chaintrue) 开启链式编程 ​编辑 Accessors(chain true,fluent true) 去除set和get 构建模式 定义 代码示例 ​编辑 踩坑 Singular 定义 代码示例 踩坑默认值情况 ​编辑 With 定义 代码示例 链式编程 定义 链…

stable diffusion

一&#xff1a;安装。 stable diffusion 安装和使用全教程 - 知乎 Stable Diffusion安装 - 知乎 环境安装&#xff1a; 1&#xff1a;python 3.10安装。 Download Python | Python.org 切记要安装3.10版本&#xff0c;因为Stable diffusion是用3.10版本编写的&#xff0c;所…

mysql综合练习语法总结

mysql综合练习 用于 小白练手的主要用于以后语法忘了回来看 题目 # 1、创建数据库test01_library # 2、创建表 books&#xff0c;表结构如下&#xff1a;# 3、向books表中插入记录 # 1&#xff09;不指定字段名称&#xff0c;插入第一条记录 # 2&#xff09;指定所有字段名…

【音频分离】demucs V3的环境搭建及训练(window)

文章目录 一、环境搭建&#xff08;1&#xff09;新建虚拟环境&#xff0c;并进入&#xff08;2&#xff09;安装pyTorch&#xff08;3&#xff09;进入代码文件夹&#xff0c;批量安装包&#xff08;4&#xff09;安装其他需要的包 二、数据集准备&#xff08;1&#xff09;下…

【Git】Git GitHub

1. Git1.1 Git基本操作1.2 Git版本回退1.3 Git分支操作 2. Git 配合GitHub2.1 生成密钥2.2 GitHub添加公钥2.3 Git连接GitHub2.4 本地仓库关联远程仓库2.5 本地代码push远程仓库2.6 本地clone远程仓库2.7 本地fetch和pull 1. Git 1.1 Git基本操作 touch test.py 工作区创建文…