QT使用QXlsx读取excel表格中的图片

前言

        读取excel表格中的图片的需求比较小众,QXlsx可以操作excel文档,进行图片读取、插入操作,本文主要分享单独提取图片和遍历表格提取文字和图片。

源码下载

github

开发环境准备

把下载的代码中的QXlsx目录,整个拷贝到所创建的qt项目下与.pro文件同层的目录下。

然后在.pro文件中加入引入目录的代码:

INCLUDEPATH += $$PWD/QXlsx
include($$PWD/QXlsx/QXlsx.pri)

功能讲解

在main.cpp中,引用头文件

#include "xlsxdocument.h"
#include "xlsxworksheet.h"

只获取excel的图片

主要用到两个关键功能:

uint Document::getImageCount()

  • 功能说明: 获取当前活动工作表中图片的个数;
  • 返回值: 工作表中图片个数;

bool Document::getImage(int imageIndex, QImage& img)

  • 功能说明: 以【索引】方式获取当前活动工作表中索引为imageIndex的图片;
  • 参数imageIndex:需要获取的图片的索引(从1开始);
  • 参数img: 用于保存获取的图片;
  • 返回值: true:获取图片成功,false:获取图片失败;
void getExcelImages(const QString& excelfilePath){QXlsx::Document xlsx(excelfilePath);//打开excel文件QXlsx::Worksheet* sheet = xlsx.currentWorksheet();if (!sheet) {qDebug() << "Failed to load sheet!";return;}uint count = xlsx.getImageCount();// 查询当前Sheet中图片数量qDebug() << "当前Sheet中图片数量:"<< count;//遍历图片,并保存QImage image;for (int num = 1; num <= count; ++num) {//索引是从1开始,而不是从0开始bool ret=xlsx.getImage(num, image);if(ret==true){QString fullPath=QString("./excelimage%1.png").arg(num);image.save(fullPath);}}
}

遍历表格提取文字和图片

主要用到1个关键功能:

bool Document::getImage(int row, int col, QImage &img)
功能说明: 以【行列号】方式获取当前活动工作表中位于row行、col列的图片;
参数row: 图像的左上角位于row行(从1开始,取值时,想要减去1);
参数col: 图像的左上角位于col行(从1开始,取值时,想要减去1);
参数img: 用于保存获取的图片;
返回值: true:获取图片成功,false:获取图片失败;

void getExcelcontentandImages(const QString& filePath) {QXlsx::Document xlsx(filePath);QXlsx::Worksheet* sheet = xlsx.currentWorksheet();if (!sheet) {qDebug() << "Failed to load sheet!";return;}QXlsx::CellRange range = sheet->dimension();int imagenum=1;for (int row = range.firstRow(); row <= range.lastRow(); ++row) {QString showmsg=QString("line %1:").arg(row);for (int col = range.firstColumn(); col <= range.lastColumn(); ++col) {QVariant cellValue = sheet->read(row, col);if (cellValue.canConvert<QString>()) {//判断是不是字符串类型//qDebug() << "Cell(" << row << "," << col << "):" << cellValue;showmsg += cellValue.toString();showmsg += " ";}else{//看看是不是图片,如果是就保存qDebug() << row << "==" << col;QImage image;bool ret=xlsx.getImage(row-1,col-1, image);//图片的行和列都要减去1才能获取到图片if(ret==true){showmsg += " 图片保存";QString fullPath=QString("./excelimage%1.png").arg(imagenum);image.save(fullPath);imagenum++;//累加}}}qDebug() << showmsg;}
}

结尾

        本篇是一位读者在我的博文【QT常用技术讲解】excel表格处理两种方式:QAxObject和qtxlsx 中提问QXlsx怎么读取表格中图片?经过查看QXlsx的源码xlsxdocument.h中发现没有获取图片修改的函数,然后到github上下载新的代码,发现是有的(如下图所示),如果下载下来测试是可行的,代码参见资源附件。

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

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

相关文章

抽奖相关功能测试思路

1. 抽奖系统功能测试用例设计&#xff08;登录 每日3次 中奖40% 道具兑换码&#xff09; ✅ 功能点分析 必须登录后才能抽奖每天最多抽奖3次抽奖有 40% 概率中奖中奖返回兑换码 ✅ 测试用例设计 编号 用例描述 前置条件 操作 预期结果 TC01 未登录时抽奖 未登录 …

Unity editor文件数UI(支持勾选框)

unity editor文件数&#xff08;支持勾选框&#xff09; 使用的时候new一个box即可 using Sirenix.OdinInspector; using Sirenix.OdinInspector.Editor; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;[Serializable] publ…

RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例 0.RabbitMQ官网通信模式1.Simplest(简单)模式1.1 发送端1.2 接收端 0.RabbitMQ官网通信模式 1.Simplest(简单)模式 1.1 发送端 # -*- coding: utf-8 -*- """ Author: xxx date: 2025/5/19 11:30 Description: Simaple简单模…

隨筆20250519 Async+ThreadPoolTaskExecutor⾃定义线程池进阶实战

1.ThreadPoolTaskExecutor线程池 有哪⼏个重要参数&#xff0c; 什么时候会创建线程 1.核心綫程數 查看核心綫程數目是否已經滿&#xff0c;未滿 創建一條綫程 執行任務&#xff0c;已滿負責執行第二部 2.阻塞隊列 查看阻塞隊列是否已經滿&#xff0c;未滿將任務加入阻塞隊列&…

YOLO11解决方案之实例分割与跟踪探索

概述 Ultralytics提供了一系列的解决方案,利用YOLO11解决现实世界的问题,包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 实例分割是一项计算机视觉任务,涉及在像素级别识别和勾勒图像中的单个对象。与只按类别对像素进行分类的语义分割…

VScode各文件转化为PDF的方法

文章目录 代码.py文件.ipynb文本和代码夹杂的文件方法 1:使用 VS Code 插件(推荐)步骤 1:安装必要插件步骤 2:安装 `nbconvert`步骤 3:间接导出(HTML → PDF)本文遇见了系列错误:解决方案:问题原因步骤 1:降级 Jinja2 至兼容版本步骤 2:确保 nbconvert 版本兼容替代…

现代计算机图形学Games101入门笔记(十五)

蒙特卡洛积分 为什么用蒙特卡洛积分&#xff0c;用来做什么&#xff1f;跟黎曼积分区别&#xff0c;黎曼积分是平均分成n等分&#xff0c;取每个小块中间的值取计算每个小块面积&#xff0c;再将n份集合加起来。蒙特卡洛积分就是随机取样&#xff0c;假设随机取样点xi,对应的f…

软件架构之-论高并发下的可用性技术

论高并发下的可用性技术 摘要正文摘要 ;2023年2月,本人所在集团公司承接了长三角地区某省渔船图纸电子化审查系统项目开发,该项目旨在为长三角地区渔船建造设计院、以及渔船审图机构提供一个便捷化的服务平台。在此项目中,我作为项目组成员参与了项目建设工作,并担任系统架…

Q-learning 算法学习

Q-learning是一种经典的无模型、基于价值的算法&#xff0c;它通过迭代更新状态-动作对的Q值&#xff0c;最终找到最优策略。 一 Q-learning的核心思想 1.1目标 学习一个状态-动作价值函数 &#xff0c;表示在状态 s 下执行动作 a 并遵循最优策略后的最大累积奖励。 的核心…

鸿蒙生态崛起:开发者机遇与挑战并存

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 一、何为鸿蒙生态&#xff1f; 二、在鸿蒙生态下开发时遇到的挑战 三、对于鸿蒙生态未…

TCP/IP-——C++编程详解

1. TCP/IP 编程基本概念 TCP&#xff08;传输控制协议&#xff09;&#xff1a;面向连接、可靠的传输层协议&#xff0c;保证数据顺序和完整性。IP&#xff08;网际协议&#xff09;&#xff1a;负责将数据包路由到目标地址。Socket&#xff08;套接字&#xff09;&#xff1a…

Python图像处理基础(三)

Python图像处理基础(三) 文章目录 Python图像处理基础(三)2、计算机色彩(Computer Color)2.5 色彩分辨率2.6 灰度颜色模型2.7 CMYK 颜色模型2.7.1 K 部分2.8 HSL/HSB 颜色模型2、计算机色彩(Computer Color) 2.5 色彩分辨率 人眼可以看到许多不同的颜色,但我们的感知…

Vue路由深度解析:Vue Router与导航守卫

Vue路由深度解析&#xff1a;Vue Router与导航守卫 一、Vue Router基础与安装配置 1. Vue Router核心概念 Vue Router是Vue.js官方的路由管理器&#xff0c;主要功能包括&#xff1a; 嵌套路由映射模块化的路由配置路由参数、查询、通配符细粒度的导航控制自动激活的CSS类链…

前后端分离微服务架构

前后端分离微服务架构 介绍: 前端通过Vue和ElementUI构建界面&#xff0c;使用axios调用后端API。Nginx作为反向代理&#xff0c;将请求路由到Zuul网关。Zuul进行权限验证&#xff08;JWT&#xff09;后&#xff0c;将请求分发到微服务。(身份验证,安全防护(sql注入,xxs跨网站…

iOS 工厂模式

iOS 工厂模式 文章目录 iOS 工厂模式前言工厂模式简单工厂案例场景分析苹果类优点缺点 小结 工厂模式客户端调用**优点****缺点** 抽象工厂模式三个模式对比 前言 笔者之前学习了有关于设计模式的六大原则,之前简单了解过这个工厂模式,今天主要是重新学习一下这个模式,正式系统…

【机器学习】工具入门:飞牛启动Dify Ollama Deepseek

很久没有更新文章了,最近正好需要研究一些机器学习的东西&#xff0c;打算研究一下 difyOllama 以下是基于FN 的dify本地化部署&#xff0c;当然这也可能是全网唯一的飞牛部署dify手册 部署 官方手册&#xff1a;https://docs.dify.ai/en/getting-started/install-self-hos…

安卓A15系统实现修改锁屏界面默认壁纸功能

最近遇到一个A15系统项目&#xff0c;客户要求修改锁屏界面的默认壁纸&#xff0c;客户提供了一张壁纸图片&#xff0c;但是从A15系统的源代码查看时才知道谷歌已经去掉了相关的代码&#xff0c;已经不支持了&#xff0c;A13和A14系统好像是支持的&#xff0c;A15系统的Wallpap…

从理论到实战:模糊逻辑算法的深度解析与应用实践

从理论到实战&#xff1a;模糊逻辑算法的深度解析与应用实践 一、模糊逻辑的核心概念与数学基础 模糊逻辑&#xff08;Fuzzy Logic&#xff09;是一种处理不确定性的数学工具&#xff0c;其核心思想是将传统布尔逻辑的“非黑即白”扩展为连续的隶属度函数。例如&#xff0c;在…

正向代理与反向代理区别及应用

正向代理和反向代理是两种常见的代理服务器类型&#xff0c;它们在网络架构中扮演不同角色&#xff0c;核心区别在于代理对象和使用场景。 1. 正向代理&#xff08;Forward Proxy&#xff09; 定义&#xff1a;正向代理是客户端&#xff08;如浏览器&#xff09;主动配置的代理…

OpenCV CUDA模块中逐元素操作------逻辑运算

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 比较、AND、OR、NOT等。这类操作可用于创建基于条件的掩码&#xff0c;这对于图像分割或特征选择非常有用。 主要函数 1. 按位与 (cv::cuda::b…