当前位置: 首页 > news >正文

获取excel中的图片(包含wps中嵌入单元格图片)

项目中有excel导入功能,并且需要导入excel中的图片;模板如图:

已知office中插入的图片为浮动形式;如图:

wps中可以插入浮动图片,也可以插入嵌入单元格图片;如图:

并且在wps嵌入单元格形式的图片可以看到使用的是公式;如图:

 问题来了,如何获取图片  并且将图片与单元格进行对应

浮动形式图片获取网上一搜一大把 不多说

主要说下wps如何将单元格和获取到的图片对应

开始分析:

已知这个图片公式中的图片ID是 ID_DAF859A2B4904BF7A304D49029CAD99C

poi方法可以获取到工作表中所有图片  那么问题来了 如何将图片和图片ID对应起来

poi中没有方法可以找到对应关系 

 开始找对应关系:

将excel文件改后缀为zip  并进行解压

解压后看到文件xl路径下有个cellimages.xml

 打开并格式化后内容如下:

 可以看到这个文件里面有图片ID的数据结构 但是又是如何和图片对应起来的呢

上面我们发现如果有图片ID和图片名称的对应关系 那么我们就能确定图片ID和代码中获取的图片对应关系,但是很遗憾 这里没有这个对应关系          接下来继续找

 我们发现在解压文件夹下xl\_rels有个cellimages.xml.rels 文件

打开文件并格式化后如下:

然后就可以找到对应关系了

 有了对应关系就可以开始撸代码了

接下来贴代码:

1.使用的依赖

 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.11</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.3.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version><scope>compile</scope></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.34</version></dependency>

2.方法中传入代码中的图片公式 以及上传的文件 返回map类型

嵌入形式图片键为公式 浮动形式图片为起始单元格索引拼接字符串

方法中首先截取字符串 获取图片ID

 接下来获取xl/cellimages.xml文件中的rId和图片ID 

再接下来获取rId和图片名称对应关系

最后根据图片名称去对应工作表中获取到的图片

 就可以根据这个map去进行操作了

已将代码打包 

相关文章:

获取excel中的图片(包含wps中嵌入单元格图片)

项目中有excel导入功能,并且需要导入excel中的图片;模板如图: 已知office中插入的图片为浮动形式;如图: wps中可以插入浮动图片,也可以插入嵌入单元格图片;如图: 并且在wps嵌入单元格形式的图片可以看到使用的是公式;如图: 问题来了,如何获取图片 并且将图片与单元格进行对应 …...

Git命令详解

1 常用命令 1&#xff09;初始化本地仓库 git init <directory> 是可选的&#xff0c;如果不指定&#xff0c;将使用当前目录。 2&#xff09;克隆一个远程仓库 git clone <url> 3&#xff09;添加文件到暂存区 git add <file> 要添加当前目录中的所…...

【STM32RT-Thread零基础入门】 4. 线程介绍(理论)

文章目录 前言一、线程的概念二、线程的调度三、上下文切换四、线程的重要属性1. 线程栈2. 线程的状态3. 线程优先级4. 线程时间片5. 线程的入口函数 五、RT-Thread命令查看系统线程信息总结 前言 前文中的最后一个任务发现&#xff0c;一个main()函数很难同时实现按键功能和闪…...

css学习3(三种样式表与样式控制优先级)

1、外部样式表&#xff1a;当样式需要应用于很多页面时&#xff0c;外部样式表将是理想的选择。在使用外部样式表的情况下&#xff0c;你可以通过改变一个文件来改变整个站点的外观。每个页面使用 <link> 标签链接到样式表&#xff0c;也要放到<head>中。 2、外部…...

【JS深层解析】内存

前言 接触过 C 语言的小伙伴应该了解:C语言拥有底层最原始的内存管理办法,例如:malloc() 和 free()方法,它们被开发者用来从操作系统中分配和释放内存。 然而在JavaScript这门语言中,当我们创建了一个东西(可以被读写、传递的数据),浏览器中的 js 引擎会根据创建这个…...

第二章:25+ Python 数据操作教程(第十四节NUMPY 教程与练习)

NumPy(“Numerical Python”或“Numeric Python”的缩写)是 Python 中对数组和矩阵进行快速数学计算的最基本的软件包之一。在处理多维数据时它也非常有用。集成C、C++和FORTRAN工具是一件幸事。它还提供了许多傅里叶变换 (FT) 和线性代数函数。 为什么使用 NumPy 而不是列…...

Pycharm与Anaconda Python的开发环境搭建

目录 一&#xff1a;下载 二&#xff1a;安装python 三&#xff1a;设置Pycharm 一&#xff1a;下载 下载Anaconda&#xff1a; Anaconda | The World’s Most Popular Data Science Platform 安装好以后&#xff0c;设置一下环境变量&#xff1a; 打开命令行&#xff0c…...

2.创建小程序

创建 在开发工具中,选择小程序,点击加号 填写小程序信息,模板使用的是TS+Sass 编辑器的工作区 目录结构 项目使用的是ts的模板,目录结构和js的有一点差异,目录结构如下: miniprogram:小程序根目录 —pages:小程序页面目录 ——xxx:页面目录,一个页面对应一个目…...

XenDesktop5.6如何连接数据库

Citrix在数据库的连接方式上一直不统一&#xff0c;但是也还是有迹可循的。 经过了好长时间的下载以后&#xff0c;今天终于有时间来测试一下最新版本的XenDesktop 5 SP1&#xff0c;由于结合了其他组件和环境的需要&#xff0c;所以&#xff0c;选择了独立部署数据库&#xf…...

OAuth2.0一 Spring Security OAuth2.0

这里主讲OAuth2.0 学习OAuth2前提&#xff1a; 掌握Spring Security Spring Security学习 一 OAuth2.0介绍 OAuth&#xff08;Open Authorization&#xff09;是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;允许用户授权第三方应用访问他们…...

【linux】kernel编译时相关报错

文章目录 1. 问题现象及解决方式1. cc1: error: code model kernel does not support PIC mode 1. 问题现象及解决方式 1. cc1: error: code model kernel does not support PIC mode 问题&#xff1a;编译module时报错 原因&#xff1a;未指定交叉编译器&#xff0c;导致默认…...

C语言 功能型API --------------------strcat()

NAME strcat, strncat - concatenate two strings 头文件 SYNOPSIS #include <string.h> 函数原型&#xff1a; char *strcat(char *dest, const char *src); 功能&#xff1a; 在字符串dest的末尾将字符串src拼接上去 #include <stdio.h> #inc…...

企业展示小程序搭建指南

如今&#xff0c;移动互联网的快速发展&#xff0c;为企业展示提供了更多元化的方式。除了传统的宣传手段&#xff0c;企业还可以借助小程序来展示自己的实力和产品。本文将为大家介绍一种简单的DIY小程序的方法&#xff0c;让企业能够快速打造自己的展示平台。 首先&#xff0…...

大模型技术实践(一)|ChatGLM2-6B基于UCloud UK8S的创新应用

近半年来&#xff0c;通过对多款主流大语言模型进行了调研&#xff0c;我们针对其训练方法和模型特点进行逐一分析&#xff0c;方便大家更加深入了解和使用大模型。本文将重点分享ChatGLM2-6B基于UCloud云平台的UK8S实践应用。 01各模型结构及特点 自从2017年6月谷歌推出Transf…...

Flink状态和状态管理

1.什么是状态 官方定义&#xff1a;当前计算流程需要依赖到之前计算的结果&#xff0c;那么之前计算的结果就是状态。 这句话还是挺好理解的&#xff0c;状态不只存在于Flink&#xff0c;也存在生活的方方面面&#xff0c;比如看到一个认识的人&#xff0c;如何识别认识呢&am…...

【3Ds Max】布料命令的简单使用

简介 在3ds Max中&#xff0c;"布料"&#xff08;Cloth&#xff09;是一种模拟技术&#xff0c;用于模拟物体的布料、织物或软体的行为&#xff0c;例如衣物、帆布等。通过应用布料模拟&#xff0c;您可以模拟出物体在重力、碰撞和其他外力作用下的变形和动态效果。…...

用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件

用 VB.net&#xff0c;VBA 两种方式 读取单元格内的 换行数据&#xff0c;并出力到 CSV文件 需求 如下图所示&#xff0c;为了生成csv文件导入数据库&#xff0c;需要将下图 的 1 和 2 拼接成 如下 3 所示的一行数据&#xff0c; 开头为 1 &#xff0c;往后为 2 的换行数据 将换…...

kafka线上问题优化

如何防止消息丢失 生产者&#xff1a; 使用同步发送把ack设成1或者all&#xff08;非0&#xff0c;0可能会出现消息丢失的情况&#xff09;&#xff0c;并且设置同步的分区数>2 消费者&#xff1a;把自动提交改成手动提交 如何防止重复消费 在防止消息丢失的方案中&#…...

FifthOne:用于矢量搜索的计算机视觉接口

一、说明 数据太多了。数据湖和数据仓库;广阔的像素牧场和充满文字的海洋。找到正确的数据就像大海捞针一样&#xff01;如果你喜欢开源机器学习库 FiftyOne&#xff0c;矢量搜索引擎通过将复杂数据&#xff08;图像的原始像素值、文本文档中的字符&#xff09;转换为称为嵌入矢…...

认识Axios

axios中文网 一. 为什么会诞生Axios 最初浏览器页面向服务器请求数据时&#xff0c;返回的是整个页面&#xff0c;整个页面都会刷新ajax的出现&#xff0c;它可以在页面无刷新的情况下请求数据原生的XMLHttpRequest&#xff0c;jQuery封装的ajax&#xff0c;以及axios都可以实…...

精准匹配歌词:Foobar2000歌词插件配置完全指南

精准匹配歌词&#xff1a;Foobar2000歌词插件配置完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 3分钟完成版本适配检测 如何确定你的Foobar20…...

具身智能系统集成与计算效率优化路径探析

具身智能作为连接人工智能与物理世界的核心载体&#xff0c;通过融合感知、决策、执行等多模块实现自主交互&#xff0c;其系统集成的合理性与计算效率的高低&#xff0c;直接决定了智能体在复杂场景中的落地能力。当前&#xff0c;具身智能正从实验室走向产业化应用&#xff0…...

陀螺匠企业助手-产品

1. 功能说明维护出售产品的基本信息数据&#xff0c;支持在添加商机/合同中进行选择。2. 进入产品页面路径&#xff1a;客户>产品管理>产品3. 新增产品功能说明&#xff1a;维护产品信息&#xff0c;添加完成的产品信息&#xff0c;可以在添加商机/合同中进行选择。新增产…...

【LAMMPS实战】从文献到模拟:精准定位与获取ReaxFF反应力场参数文件

1. 初识ReaxFF反应力场&#xff1a;为什么我们需要它&#xff1f; 第一次接触分子动力学模拟时&#xff0c;我完全被各种力场搞晕了。直到遇到需要模拟化学反应的情况&#xff0c;才发现普通的力场根本不够用。这时候ReaxFF反应力场就像救命稻草一样出现了。简单来说&#xff0…...

Anthropic 经济指数报告:学习曲线

引言 Anthropic 经济指数利用隐私保护数据分析系统,追踪 Claude 在整个经济领域中的应用情况。这是Anthropic 努力的一部分,旨在尽早理解 AI 对经济的影响,以便研究人员和政策制定者有充足的时间做好准备。 在最新一期的报告中,首先观察到了与先前报告相比使用情况的变化…...

SQLite.Interop.DLL加载失败的3种修复方案 - 从运行库到项目配置全搞定

SQLite.Interop.DLL加载失败的终极解决方案&#xff1a;从运行环境到项目配置深度解析 当你正在开发一个依赖SQLite数据库的C#项目时&#xff0c;突然遇到"无法加载DLLSQLite.Interop.DLL"的错误提示&#xff0c;这绝对是一个令人头疼的问题。作为一名有多年.NET开发…...

能源监控项目避坑指南:为什么DLT645电表直连Modbus系统会失败?

能源监控项目避坑指南&#xff1a;为什么DLT645电表直连Modbus系统会失败&#xff1f; 在智慧能源项目的实施过程中&#xff0c;数据采集的可靠性直接关系到整个系统的运行效果。许多项目团队在遇到DLT645规约电表与Modbus系统对接时&#xff0c;往往会尝试直接连接&#xff0c…...

Pixel Fashion Atelier惊艳案例:‘赛博神社’主题皮装在明亮城镇UI下的生成

Pixel Fashion Atelier惊艳案例&#xff1a;‘赛博神社’主题皮装在明亮城镇UI下的生成 1. 项目概览 Pixel Fashion Atelier&#xff08;像素时装锻造坊&#xff09;是一款基于Stable Diffusion与Anything-v5的图像生成工作站。与传统AI工具不同&#xff0c;它采用了复古日系…...

计算机毕设 java 基于 BS 的驾校在线学习考试系统 SpringBoot 驾校在线学习与考试管理平台 JavaWeb 驾校理论学习与模拟考试系统

计算机毕设 java 基于 BS 的驾校在线学习考试系统 43i2x9&#xff0c;末尾的数字和英文也要加上 &#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享随着驾考需求的不断增长&#xff0c;传统驾校理…...

51单片机Proteus仿真实战:从零构建流水灯系统

1. 环境准备&#xff1a;搭建51单片机开发环境 第一次接触51单片机的朋友可能会被各种工具软件搞晕&#xff0c;其实只需要两个核心工具就能完成流水灯仿真&#xff1a;Proteus和Keil。我刚开始学单片机时也踩过不少坑&#xff0c;这里把最稳定的版本和安装要点分享给大家。 Pr…...