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

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上下载新的代码,发现是有的(如下图所示),如果下载下来测试是可行的,代码参见资源附件。

相关文章:

  • OGGMA 21c 微服务 (MySQL) 安装避坑指南
  • 25、DeepSeek-R1论文笔记
  • 设计模式7大原则与UML类图详解
  • C++学习:六个月从基础到就业——C++11/14:列表初始化
  • 数学复习笔记 19
  • JDK 21新特性全面解析
  • 【大模型面试每日一题】Day 21:对比Chain-of-Thought(CoT)与Self-Consistency在复杂推理任务中的优劣
  • Android开发——轮播图引入
  • 微积分基本规则及示例解析
  • 机器学习-人与机器生数据的区分模型测试-数据处理 - 续
  • 【Linux网络编程】Socket编程:协议理论入门
  • 数据中台驱动生产流程优化:从孤岛到全局敏捷
  • 游戏引擎学习第290天:完成分离渲染
  • ORACLE数据库实例报错ORA-00470: LGWR process terminated with error宕机问题分析报告
  • Java 原生网络编程(BIO | NIO | Reactor 模式)
  • 下集:一条打包到底的静态部署之路
  • hadoop.proxyuser.代理用户.授信域 用来干什么的
  • jvm安全点(二)openjdk17 c++源码垃圾回收安全点信号函数处理线程阻塞
  • 免费代理IP服务有哪些隐患?如何安全使用?
  • 中国各省供水量、用水量相关数据(2003-2022年)-社科数据
  • 魔都眼|邮轮港国际帆船赛启动,120名中外选手展开角逐
  • 2025年上海科技节开幕,人形机器人首次登上科学红毯
  • 61岁云浮市律师协会副会长谭炳光因突发疾病逝世
  • 3月中国减持189亿美元美债、持仓规模降至第三,英国升至第二
  • 学者三年实地调查被判AI代笔,论文AI率检测如何避免“误伤”
  • 首次公布!我国空间站内发现微生物新物种