Java 解析Excel单元格的富文本

2023-11-05

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 解析Excel单元格的富文本 的相关文章

  • java 拖放

    我尝试熟悉java中的拖放 但我发现的所有教程都是 让我生气 我想要的只是从 JList 包含在名为 UserPanel 的自制 JPanel 中 拖动 PublicUserLabel 并将其放入从 JTabbedPanel 继承的自制类中
  • 在java代码中创建postgresql表

    我有一个与 postgreSQL 数据库连接的 java 代码 现在 我希望当它连接到数据库时 我还将创建数据库表 但我的问题是 它不会创建数据库 我不知道问题是什么 这是我的代码 Statement st null ResultSet r
  • 如何将webview内容划分为多个页面

    我必须使用 Android 上的 PdfDocument 从 webView 创建 PDF https developer android com reference android graphics pdf PdfDocument htm
  • openFileOutput 在单例类中无法正常工作 - 想法/解决方法?

    作为一名 Android 开发新手 我遇到了一些奇怪的问题 我想创建一个类 它方法其他类 活动 任何可以用于以某种特殊方式处理文件的类 假设为了简单起见 我们将记录一些内容 如果我在活动中执行以下操作 例如在 OnClick 侦听器中 则一
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • 无法在 Intellij 中运行主类[重复]

    这个问题在这里已经有答案了 我有以下项目结构 ProjectRoot src Main examples libs My src文件夹被标记为sources在 Intellij 中 现在 当我想运行 Main 类时 出现以下错误 Excep
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 如何使用 aether 从 Java 找到最新版本的 Maven 工件?

    他们的文档非常薄弱 我无法弄清楚 我找到了部分答案here https stackoverflow com questions 27428068 how to retrieve the latest also snapshot versio
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • 为 REST API 生成 Swagger UI 文档

    我使用 Java 中的 JAX RS Jersey 开发了 REST API 我想为其转换 生成基于 Swagger 的 UI 文档 谁能以简单的方式告诉我如何做到这一点的精确 步骤 很抱歉 他们网站上给出的步骤对我来说有点模糊 有多种方法
  • 在 Eclipse RCP 应用程序中禁用插件贡献

    我经常遇到这个问题 但尚未找到解决方案 每当我编写一个新的基于 Eclipse RCP 的应用程序并包含来自 Eclipse 平台的插件时 我都会 继承 其中一些插件的 UI 贡献 大多数贡献 菜单项 键盘快捷键 属性页 都很有用 但有时我
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • Spring 如何在运行时获取有关“强类型集合”的泛型类型信息?

    我在 Spring 3 0 文档中阅读了以下内容 强类型集合 仅限 Java 5 在 Java 5 及更高版本中 您可以使用强类型集合 使用泛型类型 也就是说 可以声明一个 Collection 类型 使其只能包含 String 元素 例如
  • 如何在不使用 -cp 开关的情况下在 Groovy 中自动加载数据库 jar?

    我想简化调用 Oracle 数据库的 Groovy 脚本的执行 如何将 ojdbc jar 添加到默认类路径以便我可以运行 groovy RunScript groovy 代替 groovy cp ojdbc5 jar RunScript
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j

随机推荐

  • 深度学习GPU环境安装(Windows、WSL)

    目录 1 概述 2 windows环境安装 2 1 电脑配置 2 2 安装PyTorch 2 3 安装CUDA和cuDNN 2 4 环境变量配置 2 5 测试 3 WSL Linux环境安装 ubuntu 3 1 安装 ubuntu 3 2
  • Vue+Echarts实现饼图统计通过率

    Vue Echarts实现一个饼状图 1 在项目里面安装echarts 2 在需要用图表的地方引入 1 在项目里面安装echarts 在项目中安装echarts 插件 cnpm install echarts save 2 在需要用图表的地
  • 【分治算法】有重复元素的排列问题

    算法实现题 2 8 有重复元素的排列问题 问题描述 设 R r1 r2 rn 是要进行排列的 n 个元素 其中元素r1 r2 rn 可能相同 试设计 一个算法 列出 R 的所有不同排列 编程任务 给定 n 以及待排列的 n 个元素 计算出这
  • 浪潮英信NF5245M3服务器系统安装手册

    安装前 1 准备工作 准备软件 rhel server 6 2 x86 64 dvd ISO镜像 点我下载 RedHat 6 2 EM64T Raid驱动程序 点我下载 UltraISO工具 准备硬件 16GU盘一枚 2 制作U盘启动 Ul
  • os.environ[“CUDA_VISIBLE_DEVICES“] = args.device不起作用

    问题描述 在代码中这样写 if name main os environ CUDA VISIBLE DEVICES args device main 不起作用 原因是os environ CUDA VISIBLE DEVICES args
  • Android使用不可滑动RecyclerView条目显示不全问题(只显示两个item)

    文章目录 前言 二 解决步骤 1 xml布局 2 java代码示例 总结 前言 在写一个ScrollView包裹RecyclerView的功能时 要求RecyclerView包裹数据长度且不可滑动 设置不可滑动后发现item只展示了两条数据
  • svn中出现各种感叹号说明

    黄色感叹号 有冲突 这是有冲突了 冲突就是说你对某个文件进行了修改 别人也对这个文件进行了修改 别人抢在你提交之前先提交了 这时你再提交就会被提示发生冲突 而不允许你提交 防止你的提交覆盖了别人的修改 要解决冲突 如果你确认你的修改是无效的
  • 实现一个计算输入的两数的和与差的简单函数。

    实现一个计算输入的两数的和与差的简单函数 首先 我们知道一般从子函数只能向主函数中返回一个值 可是本题却要求我们返回和与差 这样我们就无法通过返回值来进行完成 于是我相信很多初学者都会犯如下错误 在子函数中通过值传递的方式计算出加减的结果
  • 算法---LeetCode 200. 岛屿数量

    1 题目 原题链接 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成 此外 你可以假设该网格的四条边均被水包围 示例 1 输入 gr
  • 非监督特征学习与深度学习(十五)--------长短记忆(Long Short Term Memory,LSTM)

    注 本文转载自https github com exacity simplified deeplearning blob master E5 BE AA E7 8E AF E9 80 92 E5 BD 92 E7 BD 91 E7 BB 9
  • android BitmapFactory.decodeFile返回null

    在做拍照后图片显示的时候 第一次BitmapFactory decodeFileBitmapFactory decodeFile没有返回空 能够正常显示图片 到第二次拍照查看照片时返回null 查看路径都没问题 两张都有保存下来 搜了很多类
  • 安全生产知识竞赛活动小程序界面分享

    安全生产知识竞赛活动小程序界面分享
  • 常见算法问题总结

    1 给定二维数组 其中的元素是a z的26个小写字母 例如如下 int 3 3 a b a c e f d g h i 任意给定字符串str acg 判断在该二维数组中是否存在该字符串 提示 存在是指在二维数组中上 下 左 右所有字符串时候
  • 数组详解【Java】

    目录 前言 一 数组的概念 二 如何使用数组 1 Java中数组的创建以及初始化 2 数组的使用 2 1 用for循环打印 和C语言的原理是一样的 2 2 用for each打印 2 3 用库函数打印 三 数组是引用类型 3 1 简单的认识
  • linux上运行出错libstdc++.so.6 version CXXABI_1.3.8找不到怎么办

    ImportError lib64 libstdc so 6 version CXXABI 1 3 8 not found的解决办法 在Centos7上跑python程序 发现报错找不到CXXABI 1 3 8 查找一通 发现原来是GCC的
  • JVM-类加载器、对象创建

    目录 类加载的各个阶段 一 加载 二 连接 三 初始化 类加载器 Bootstrap ClassLoader Extension ClassLoader 双亲委派 自定义类加载器 即时编译器优化 逃逸分析 方法内联 对象创建 1 类加载检查
  • IDEA-推荐几款好用的插件

    ignore git提交时过滤掉不需要提交的文件 很方便 有些本地文件是不需要提交到Git上的 TranslationPlugin 对于不经常使用英语的同学来说 对类 变量 方法想取一个合适的名字 此时发现自己的词汇早已还给老师 怎么办 这
  • 腾讯云默认操作系统被安装的软件

    1 云镜软件 usr local qcloud YunJing YDEyes usr local qcloud YunJing YDEyes YDService usr local qcloud YunJing YDEyes YDLive
  • 在vscode上搭建Shadertoy的环境

    目录 一 前期准备 1 1 vscode下载安装 1 2 Shadertoy网站 二 使用Shadertoy的效果 2 1 在vscode中查找如下插件 三 调用本地的glsl脚本 一 前期准备 1 1 vscode下载安装 Visual
  • Java 解析Excel单元格的富文本

    1 总体介绍 该方法是解析 xlsx 单元格中的富文本 注意不是 xls xls 的 api 不一样 试了很久没成功 只实现了解析 斜体字 上下标 其它的实现方式应该类似 2 具体实现 2 1 代码 package util import