在 wps excel 中,可以把图片嵌入单元格,此时会图片单元格会显示如下内容

=DISPIMG("ID_142D0E21999C4D899C0723FF7FA4A9DD",1)

下面是针对这中图片文件的解析实现

参考博客:Python读取wps中的DISPIMG图片格式_wps dispimg-CSDN博客:https://blog.csdn.net/QAZJOU/article/details/139709948

解析出 dispimg_id

简单的字符串替换实现

def save_dispimg_id(self,cell_value):img_id=cell_value.replace('=DISPIMG("',"").replace('",1)',"")self.wps_dispimg_id_list.append(img_id)pass    

解析出 dispimg_id 对应的图片文件流

import zipfile
from lxml import etreewps_dispimg_map ={}def get_wps_dispimg_map(excel_file):if len(wps_dispimg_map)>0:returnxml_content_namespaces = {'xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing','a': 'http://schemas.openxmlformats.org/drawingml/2006/main','r':"http://schemas.openxmlformats.org/officeDocument/2006/relationships",'etc':"http://www.wps.cn/officeDocument/2017/etCustomData"}ref_xml_content_namespaces = {None:"http://schemas.openxmlformats.org/package/2006/relationships",}# 打开 XLSX 文件with zipfile.ZipFile(excel_file, 'r') as zfile:xml_content=""rel_xml_content=""# 获取 dispimg_id rId 的映射关系with zfile.open('xl/cellimages.xml') as file:xml_content = file.read()# 获取 rId  target 的映射关系with zfile.open('xl/_rels/cellimages.xml.rels') as file:rel_xml_content = file.read()xml_content_map={}rel_xml_content_map={}xml_content_root = etree.fromstring(xml_content)xdr_pics = xml_content_root.findall(".//xdr:pic",xml_content_namespaces)for xdr_pic in xdr_pics:dispimg_id = xdr_pic.find('.//xdr:cNvPr', namespaces=xml_content_namespaces).attrib.get('name',None)rId = xdr_pic.find('.//a:blip', namespaces=xml_content_namespaces).attrib.get(f'{{{xml_content_namespaces["r"]}}}embed',None)if dispimg_id is not None and rId is not None:xml_content_map[dispimg_id]=rIdrel_xml_content_root = etree.fromstring(rel_xml_content)Relationships=rel_xml_content_root.findall('.//Relationship', namespaces=ref_xml_content_namespaces)for Relationship in Relationships:rId=Relationship.attrib.get('Id',None)Target=Relationship.attrib.get('Target',None)if rId is not None and Target is not None:rel_xml_content_map[rId]=f"xl/{Target}"for dispimg_id,rId in xml_content_map.items():for rId2,Target in rel_xml_content_map.items():if rId2 != rId:continueif Target is None:continuewith zfile.open(Target) as img_file:image_binary_data = img_file.read()if image_binary_data is not None and len(image_binary_data)>0:wps_dispimg_map[dispimg_id]=image_binary_databreakreturn wps_dispimg_map

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习---Spring及其衍生(下)

接下来就到了Spring的另外2个知名的衍生框架,SpringBoot和SpringCloud。其中,SpringBoot 是由 Pivotal 团队开发的一个基于 Spring 的框架,它的设计目的是简化 Spring 应用程序的初始搭建和开发过程。SpringBoot 遵循 “约定优于配置” 的原则…

残月头像阁

残月头像阁 使用说明: 直接上传服务器即可## 项目简介残月头像阁是一个简洁美观的头像网站开源程序 支持快速部署与自定义采用拟态(Neumorphism)设计风格,提供多种分类的头像## 功能特性- 🖼️ 多分类头像展示(男生、女生、卡通、情侣、动漫&…

文献综述AI生成免费工具推荐:高效整理文献

做学术研究时,文献综述无疑是让很多学子和科研工作者头疼的环节。查阅、筛选、梳理大量文献,然后进行归纳总结,最终形成一篇条理清晰的文献综述,这一整个过程常常耗费数日甚至数周。而面对课业压力与紧迫的论文截止时间&#xff0…

OpenCV —— contours_matrix_()_[]

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

android 小bug :文件冲突的问题

文章目录前言1、问题:两个文件冲突了2、原因:3、结果:后语前言 一个身份证模块识别的小bug,记录一下,这应该是第三次出现,每次出现都不太记得,还是得记录,不然都是重复检索的过程。…

Java学习第七十三部分——Redis

目录 一、前言提要 二、核心特性 三、数据结构 四、应用场景 五、架构模式 六、性能优势 七、客户端库 八、注意事项 九、选择建议 十、使用示例——基于Jedis 和 Lettuce 十一、生态集成——基于Spring Boot 十二、企业级能力 十三、持久化机制 十四、高…

(LeetCode 每日一题) 3487. 删除后的最大子数组元素和 (哈希表)

题目:3487. 删除后的最大子数组元素和 思路:哈希表,时间复杂度0(n)。 维护数组nums的最大值mx,同时用哈希表mp维护数组中非负数出现的情况,记录非负数的和sum。如果哈希表mp的大小为0,那么数组nums都是负数…

C 语言输入输出 (I/O)

C 语言输出在C语言编程中&#xff0c;printf()是主要的输出函数之一。该函数将格式化的输出发送到屏幕。例如&#xff0c;示例1&#xff1a;C 语言输出#include <stdio.h>int main (int argc, char* argv) {printf("Hello world\n");return 0; }输出结果C Prog…

分布式系统中的缓存设计与应用

引言 缓存是分布式系统中的重要组件&#xff0c;主要解决高并发&#xff0c;大数据场景下&#xff0c;热点数据访问的性能问题。提供高性能的数据快速访问。 本文是缓存在分布式应用第一篇文章&#xff0c;介绍缓存的原理&#xff0c;缓存的分类&#xff0c;缓存的设计&#xf…

智能机器人的技术革命:从感知到决策的全栈架构解析

——基于多模态大模型的下一代机器人系统设计引言&#xff1a;机器人技术的范式迁移当波士顿动力的Atlas完成后空翻时&#xff0c;全球见证了机器人运动控制的巅峰&#xff1b;但当Figure 01通过大模型理解人类模糊指令并自主执行任务时&#xff0c;我们正见证机器人认知智能的…

day20 双向链表

双向链表的函数功能注意事项 1.双向链表还需要关注到前指针的指向2.函数都需要判断逻辑3.函数的增删都要关注到len的变化4.函数的改查功能都需要遍历结束的标志NULL5.注意p->next->prio时&#xff0c;p->next是否指向NULL创建双向链表头节点Node_ptr list_create()函数…

[Rust 基础课程]猜数字游戏-获取用户输入并打印

创建项目 按照之前的章节讲的创建一个 Cargo 项目的方法&#xff0c;自己创建一个名为 guessing_game 的 cargo 项目并执行&#xff0c;确保能成功打印出 Hello World。 编写代码 使用 RustRover 打开项目&#xff0c;打开 src/main.rs 文件&#xff0c;我们将在这个文件中编写…

重读《人件》Peopleware -(22)Ⅲ 适当人选 Ⅵ 乐在其中(上)

本章以一个小测验开始&#xff1a;问题1&#xff1a;在过去几年里&#xff0c;你们组织的年员工流失率是多少&#xff1f; 问题2&#xff1a;替换一个离职员工平均需要多少成本&#xff1f;评分标准如下&#xff1a;如果你对这两个问题有任何答案&#xff0c;则通过&#xff1b…

Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡

Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡既然我们甲方要做直播私有化&#xff0c;既然我们做了这么多年系统&#xff0c;我们对直播的理解很深&#xff0c;那么我们2025年就应该用更先进的技术栈&#xff0c;不然怎么让我们的…

SpringBoot 集成Mybatis Plus

一、为什么SpringBoot不推荐使用MybatisSpring Boot 不推荐使用 MyBatis&#xff0c;主要源于二者在设计理念、生态融合和开发风格上的差异。Spring Boot 强调“约定优于配置”&#xff0c;追求高效的开发体验和统一的框架风格。它通过自动配置和依赖注入&#xff0c;将复杂的基…

PI 思维升级 PI设计的典范转移:从阻抗思维到谐振控制

们先来回想一件事&#xff0c;根据欧姆定律&#xff0c;阻抗是不是越低越好&#xff1f; 代表即使有很大的瞬时电流&#xff0c;瞬间的电压降也不会超过某个极限&#xff01;理论上是&#xff01; 可是这其实忽略了两个关键的要素&#xff1a;PDN阻抗有谐振&#xff1a;谐振代表…

如何制定企业级服务器安全策略(Security Policy)

制定一套**企业级服务器安全策略&#xff08;Security Policy&#xff09;**对于保护服务器资源、数据安全和业务连续性至关重要。以下是制定安全策略的详细指南&#xff0c;包括安全策略的核心要素、实施步骤和具体措施&#xff0c;帮助企业构建全面的服务器安全防护体系。1. …

n1 armbian docker compose 部署aipan mysql

apt update apt install docker-compose-plugin -y #安装docker compose docker compose version Docker Compose version v2.38.2 sudo mkdir -p /sda1/data/mysql/conf.d sudo chown -R 999:999 /sda1/data/mysql # MySQL 用户 UID 通常为 999 cat docker-compose.yml vers…

RAG情境化分段向量模型voyage-context-3,聚焦分段细节,融入全局文档上下文

最近看到一个有意思的工作&#xff0c;原文来自&#xff1a; https://blog.voyageai.com/2025/07/23/voyage-context-3/?utm_sourceTWITTER&utm_mediumORGANIC_SOCIAL voyage-context-3&#xff1a;聚焦分段细节&#xff0c;融入全局文档上下文 概要&#xff1a; Voyage A…