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

wps dispimg python 解析实现参考

在 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.dtcms.com/a/293136.html

相关文章:

  • ROS个人笔记
  • 【音视频协议篇】RTMP协议
  • A316-HF-I2S-V1:USB TO I2S HiFi音频转换器评估板技术解析
  • Flutter基础(前端教程①⑨-margin-padding)
  • 构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究
  • List和Map的区别
  • Java值传递和构造函数
  • Java HttpClient使用手册
  • 【C语言进阶】动态内存管理(1)
  • Model Control Protocol 使用MCP进行各种任务适配,调用工具和资源进行客户端开发
  • OneCode3.0 UI组件注解详解手册
  • 前端之jQuery
  • Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
  • PCIe Base Specification解析(二)
  • Linux笔记2——常用命令-1
  • Sa-Token大师:第四章 - 企业级架构与源码实战
  • 首次启动 - OpenExo
  • 开发板系统烧写
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的实习管理系统(附源码+数据库+毕业论文+项目部署视频教程+项目所需软件工具)
  • 面试知识梳理-vue3和vue2区别
  • Spring快速整合Mybatis
  • PyTorch武侠演义 第一卷:初入江湖 第4章:损失玉佩的评分风波
  • 支付鉴权方案介绍
  • langchain4j之RAG 检索增强生成
  • 电子基石:硬件工程师的器件手册 (六) - MOSFET:电压控制的效率王者
  • 无人机AI制导模块技术分析
  • 最短路练习
  • Scrapyd与ScrapydAPI深度解析:企业级爬虫部署与管理解决方案
  • 面向对象分析与设计40讲(6)设计原则之开闭原则
  • Go语言初识--标识符 可见性