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.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…