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

http://www.xdnf.cn/news/502417.html

相关文章:

  • 【自然语言处理与大模型】大模型(LLM)基础知识④
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(23):受身形
  • mAP、AP50、AR50:目标检测中的核心评价指标解析
  • 开源项目实战学习之YOLO11:12.2 ultralytics-models-sam-decoders.py源码分析
  • Vue百日学习计划Day19-20天详细计划-Gemini版
  • 密文搜索-map容器+substr
  • javaDoc
  • 电子电器架构 --- 整车造车阶段四个重要节点
  • Java卡与SSE技术融合实现企业级安全实时通讯
  • 提示词写的好,也可以生成EXE
  • MySQL多条件查询深度解析
  • Qt做的应用程序无法彻底关闭的问题解析
  • MySQL 查询执行流程全解析
  • IPD推行成功的核心要素(二十二)IPD流程持续优化性地推出具备商业成功潜力的产品与解决方案
  • 使用HtmlAgilityPack采集墨迹天气中的天气数据
  • 9.DMA
  • 如果丝杆有轴向窜动应如何处理?
  • 西门子 Teamcenter13 Eclipse RCP 开发 1.3 工具栏 单选按钮
  • 使用tensorRT10部署低光照补偿模型
  • 六、绘制图片
  • traceroute命令: -g与-i 参数
  • flutter长列表 ListView、GridView、SingleChildScrollView、CustomScrollView区别
  • 专题四:综合练习(组合问题的决策树与回溯算法)
  • 嘉立创EDA成图:文件管理
  • 【前端基础】11、CSS的属性特性(继承、层叠、元素类型、隐藏元素的四种方式)
  • 【笔记】正弦交流电路的特征量
  • MMDetection环境安装配置
  • 小蜗牛拨号助手用户使用手册
  • STM32中的DMA
  • Python自学笔记3 常见运算符