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

QT 读取Excel表

一、QAxObject
读取excel表的内容,其仅在windows下生效,当然还有其他跨平台的方案。

config += qaxcontainer
#include <QAxObject>QStringList GetSheets(const QString& strPath)
{QAxObject* excel = new QAxObject("Excel.Application");      // 加载 Microsoft Excel 控件excel->dynamicCall("SetVisible(bool)", false);              // 不显示Excel窗体QAxObject* workbooks = excel->querySubObject("WorkBooks");  // 获取工作薄集合QAxObject* workopen = workbooks->querySubObject("Open(const QString&)", strPath);QAxObject* mySheets = workopen->querySubObject("WorkSheets");QAxObject* workbook = excel->querySubObject("ActiveWorkBook");  // 获取当前工作薄QAxObject* sheets = workbook->querySubObject("Sheets");      // 当前工作薄的工作表集合int nSheetCount = sheets->property("Count").toInt();         // 工作表个数QStringList SheetsList;for (int i = 0; i < nSheetCount; i++){QAxObject* sheet = workbook->querySubObject("Sheets(int)", i + 1);QString Name = sheet->property("Name").toString();SheetsList.push_back(Name);}workopen->dynamicCall("Close()");excel->dynamicCall("Quit()");delete excel;return SheetsList;
}QVariant readAll(QAxObject* sheet)
{QVariant var;if (sheet != nullptr && !sheet->isNull()){QAxObject* usedRange = sheet->querySubObject("UsedRange");if (nullptr == usedRange || usedRange->isNull())return var;var = usedRange->dynamicCall("Value");delete usedRange;}return var;
}bool GetVariant(const QString strName, const QVariant& Line, QList<DeviceVariant>& lstParam)
{QVariantList thisLine = Line.toList();if (thisLine.at(0).type() != QVariant::Invalid){qDebug() << thisLine.at(0).toString();// 最好将每一列单元格数据记录下来,如果好几行共用同一列的数据,只能读取到首列m_oneCol = thisLine.at(0).toString();  } else if (thisLine.at(1).type() != QVariant::Invalid){qDebug() << thisLine.at(1).toString();m_secondCol = thisLine.at(1).toString();} 
}bool ReadExcel(const QStringList& Sheets, QList<DeviceVariant>& Data)
{QAxObject* excel = new QAxObject("Excel.Application");excel->dynamicCall("SetVisible(bool)", false);QAxObject* workbooks = excel->querySubObject("WorkBooks");QAxObject* myWork = workbooks->querySubObject("Open(QString&)", "D:\\test.xlsx");QAxObject* mySheets = myWork->querySubObject("WorkSheets");bool ret = true;for (auto& sheetName : Sheets){QAxObject* sheet = mySheets->querySubObject("Item(QString)", sheetName);if (!sheet){ret = false;break;}QVariantList mData = readAll(sheet).toList();for (auto& Line : mData){QList<DeviceVariant> custormList;// 解析每一行数据,存储数据到自定义结构体中if (GetVariant(sheetName, Line, custormList))continue;Data += custormList;}}myWork->dynamicCall("Close()");excel->dynamicCall("Quit()");delete excel;return ret;
}

使用

QStringList strSheets = GetSheets("D:\\test.xlsx");
QList<DeviceVariant> data;
ReadExcel(strSheets, data);

相关文章:

QT 读取Excel表

一、QAxObject 读取excel表的内容&#xff0c;其仅在windows下生效&#xff0c;当然还有其他跨平台的方案。 config qaxcontainer #include <QAxObject>QStringList GetSheets(const QString& strPath) {QAxObject* excel new QAxObject("Excel.Application&…...

深入理解 Vue 组件样式管理:Scoped、Deep 和 !important 的使用20240909

深入理解 Vue 组件样式管理&#xff1a;Scoped、Deep 和 !important 的使用 在前端开发中&#xff0c;样式的管理与组件化开发之间的平衡一直是一个难题。Vue.js 提供了一些强大的工具来帮助开发者在开发复杂的应用时管理样式。这篇文章将详细介绍 Vue 中的 scoped、:deep() 和…...

C语言内存函数(21)

文章目录 前言一、memcpy的使用和模拟实现二、memmove的使用和模拟实现三、memset函数的使用四、memcmp函数的使用总结 前言 正文开始&#xff0c;发车&#xff01; 一、memcpy的使用和模拟实现 函数模型&#xff1a;void* memcpy(void* destination, const void* source, size…...

三高基本概念之-并发和并行

并行和并发是计算机科学中两个重要但容易混淆的概念&#xff0c;它们之间的主要区别可以从以下几个方面进行阐述&#xff1a; 一、定义与含义 并行&#xff08;Parallel&#xff09;&#xff1a;并行是指两个或多个事件在同一时刻发生&#xff0c;即这些事件在微观和宏观上都…...

宝塔面板FTP连接时“服务器发回了不可路由的地址。使用服务器地址代替。”

参考 https://blog.csdn.net/neizhiwang/article/details/106628899 错误描述 我得服务器是腾讯&#xff0c;然后使用宝塔建了个HTML网站&#xff0c;寻思用ftp上传&#xff0c;结果报错&#xff1a; 状态: 连接建立&#xff0c;等待欢迎消息... 状态: 初始化 TLS 中... 状…...

面试的一些小小经验

无论何时&#xff0c;找到合适的满意的工作&#xff08;距离住处的地理位置&#xff0c;薪资&#xff0c;工作氛围&#xff09;并不是一件容易的事情。个人能力与职位的适配性永远是有误差的客观存在。 十全十美难得&#xff0c;满足个人的个体化优先级才是客观的存在。 1.投简…...

IV转换放大器原理图及PCB设计分析

【前言】 今天给大家分享一下关于IV转换放大器的相关电路设计心得。IV转换使用的场合非常之多&#xff0c;尤其是电流型输出的传感器&#xff0c;比如光敏二极管、硅光电池等等&#xff0c;这些传感器输出的电流信号非常微弱&#xff0c;我们如果需要检测它们&#xff0c;首先得…...

【数学建模经验贴】一个研赛数模老手的经验

我&#xff08;非C君&#xff0c;是一个朋友&#xff09;参加了3次“深圳杯”数模&#xff0c;1次全国大学生数模&#xff0c;以及1次全国研究生数模&#xff0c;2016年参加了全国研究生数模的交流会&#xff0c;但没有参加过美赛&#xff0c;应该算是一个江湖老手了吧。下面内…...

vivo手机已删除的短信还能恢复吗?

虽然现在我们很少使用vivo手机的短信功能&#xff0c;但是我们偶尔还会通过vivo手机短信功能接收一些重要的信息。如果我们在清理垃圾短信的时候误删了vivo手机重要短信&#xff0c;该怎么恢复呢&#xff1f; 方法一&#xff1a;通过vivo云服务恢复 1、确保您已开启vivo云服务…...

[网络][CISCO]CISCO IOS升级

CISCO IOS升级-&#xff08;转&#xff09;2008-06-27 15:35IOS 升级 在介绍CISCO路由器IOS升级方法前&#xff0c;有必要对Cisco路由器的存储器的相关知识作以简单介绍。路由器与计算机相似&#xff0c;它也有内存和操作系统。在Cisco路由器中&#xff0c;其操作系统叫做互连…...

通过python提取PDF文件指定页的图片

整体思路 要从 PDF 文件中提取指定页和指定位置的图片&#xff0c;可以分几个步骤来实现&#xff1a; 1.1 准备所需工具与库 在 Python 中处理 PDF 和图像时&#xff0c;需要使用几个库&#xff1a; PyMuPDF (fitz)&#xff1a;用于读取和处理 PDF 文件&#xff0c;可以精确…...

Leetcode Hot 100刷题记录 -Day12(轮转数组)

轮转数组 问题描述&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4]解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向…...

GitHub每日最火火火项目(9.13)

以下是对这些项目的详细介绍&#xff1a; fishaudio 的 fish-speech&#xff1a; 基本信息&#xff1a;这是一种全新的语音技术解决方案&#xff0c;属于文本到语音&#xff08;Text-to-Speech&#xff0c;TTS&#xff09;技术范畴。技术特点&#xff1a; 多语言支持&#xff…...

力扣--649.Dota2参议院

Dota2 的世界里有两个阵营&#xff1a;Radiant&#xff08;天辉&#xff09;和 Dire&#xff08;夜魇&#xff09; Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中&#xff0c;每一位参…...

vim 安装与配置教程(详细教程)

vim就是一个功能非常强大的文本编辑器&#xff0c;可以自己DIY的那种 &#xff0c;不但可以写代码 &#xff0c;还可编译 &#xff0c;可以让你手不离键盘的完成鼠标的所有操作。 如果想要了解vim的的发展历史和详细解说&#xff0c;可以自行上网搜索&#xff0c;我主要是记录一…...

【WPF】Popup的使用

WPF&#xff08;Windows Presentation Foundation&#xff09;中的Popup控件用于创建弹出窗口&#xff0c;如工具提示、上下文菜单等。Popup控件本身并不直接显示任何内容&#xff0c;它需要一个子元素来显示实际的内容。 以下是一个简单的XAML示例&#xff0c;展示如何创建一…...

力扣刷题之2576.求出最多标记下标

题干描述 给你一个下标从 0 开始的整数数组 nums 。 一开始&#xff0c;所有下标都没有被标记。你可以执行以下操作任意次&#xff1a; 选择两个 互不相同且未标记 的下标 i 和 j &#xff0c;满足 2 * nums[i] < nums[j] &#xff0c;标记下标 i 和 j 。 请你执行上述操…...

黑马JavaWeb开发笔记16——请求(postman、简单参数、实体参数、@RequestParam映射)

文章目录 前言一、postman工具1. 引入2. 介绍3. 安装4. 使用 二、简单参数1. 原始方式&#xff08;仅了解&#xff0c;以后的开发不会使用&#xff09;2. SpringBoot方式3. 参数名不一致(RequestParam映射) 三、实体参数1. 简单实体对象2. 复杂实体对象 总结 前言 本篇文章是2…...

Corrupt block relative dba: 0x02c0b382 (file 11, block 45954)

接前面断电故障处理2&#xff1a;oracle数据库断电无法启动恢复-CSDN博客 DM00 started with pid145, OS id16516, job SYS.SYS_IMPORT_TABLE_01 2024-09-13T20:05:22.33130208:00 ADVISORY: Please collect redo for investigation of ORA-8103. Use command: ALTER SYSTE…...

二叉排序树在实际生活应用中作用

二叉排序树&#xff08;Binary Search Tree, BST&#xff09;在实际生活中有多种应用&#xff0c;主要用于需要快速查找、插入和删除操作的场景。以下是一些常见的应用领域和具体示例&#xff1a; 1.数据库索引 数据库系统中经常使用 BST 作为索引结构。例如&#xff0c;B-tr…...

z.lua 项目贡献指南:如何参与这个开源工具的开发

z.lua 项目贡献指南&#xff1a;如何参与这个开源工具的开发 【免费下载链接】z.lua :zap: A new cd command that helps you navigate faster by learning your habits. 项目地址: https://gitcode.com/gh_mirrors/zl/z.lua 欢迎来到 z.lua 项目贡献指南&#xff01;z.…...

Android14 SurfaceFlinger启动流程与线程调度机制解析

1. SurfaceFlinger的启动入口与初始化流程 Android显示系统的核心服务SurfaceFlinger由init进程启动&#xff0c;这个设计保证了它在系统早期就能准备好图形合成能力。main函数作为入口点&#xff0c;首先做了一系列关键初始化&#xff1a; 设置Binder线程池的最大线程数为4&…...

MogFace人脸检测模型-WebUI详细步骤:如何通过service_ctl.sh管理服务生命周期

MogFace人脸检测模型-WebUI详细步骤&#xff1a;如何通过service_ctl.sh管理服务生命周期 1. 服务管理工具介绍 MogFace人脸检测服务提供了一个强大的管理工具service_ctl.sh&#xff0c;这个脚本让你能够轻松控制服务的整个生命周期。无论你是需要启动、停止、重启服务&…...

UNet架构优势解析:cv_unet_image-colorization语义特征与纹理保留实测

UNet架构优势解析&#xff1a;cv_unet_image-colorization语义特征与纹理保留实测 1. 引言&#xff1a;为什么UNet是图像上色的理想选择&#xff1f; 你有没有翻过家里的老相册&#xff1f;那些泛黄的黑白照片&#xff0c;承载着珍贵的记忆&#xff0c;却总让人觉得少了点什么…...

避开这些坑!个人免签支付平台实战对比:蓝鲸、V云、云免签到底怎么选?

个人免签支付平台深度评测&#xff1a;如何根据业务需求选择最优方案&#xff1f; 对于独立开发者和小型站长来说&#xff0c;支付接入一直是令人头疼的问题。没有企业资质无法直接对接官方支付渠道&#xff0c;而传统的第三方支付平台又往往门槛高、手续费昂贵。近年来兴起的个…...

Qwen2.5-VL-7B-Instruct图文对话教程:上传图片提问、多轮追问、结果导出全流程

Qwen2.5-VL-7B-Instruct图文对话教程&#xff1a;上传图片提问、多轮追问、结果导出全流程 你是不是经常遇到这样的情况&#xff1a;拿到一张复杂的图表&#xff0c;想快速理解里面的数据&#xff1b;或者看到一张有趣的图片&#xff0c;想知道背后的故事&#xff1b;又或者需…...

开源OFA模型多场景落地:新闻图库自动配文、政府信息公开图片无障碍描述生成

开源OFA模型多场景落地&#xff1a;新闻图库自动配文、政府信息公开图片无障碍描述生成 1. 项目概述&#xff1a;让图片会说话的智能助手 你有没有遇到过这样的情况&#xff1a;看着一张图片&#xff0c;却不知道该怎么用文字描述它&#xff1f;或者需要为大量图片手动添加文…...

MT5中文增强工具多场景落地:保险条款通俗化改写与消费者理解度提升实践

MT5中文增强工具多场景落地&#xff1a;保险条款通俗化改写与消费者理解度提升实践 1. 项目概述与核心价值 MT5中文增强工具是一个基于Streamlit和阿里达摩院mT5模型构建的本地化NLP工具&#xff0c;专门针对中文文本进行语义改写和数据增强。这个工具的最大特点是能够在保持…...

手把手教你用Python搭建IPTV直播源管理系统(DIYP影音定制版)

Python实战&#xff1a;构建高可用IPTV直播源管理系统&#xff08;DIYP影音深度集成版&#xff09; 在流媒体技术蓬勃发展的今天&#xff0c;个性化直播解决方案正成为技术爱好者的新宠。本文将带你从零开始&#xff0c;用Python打造一个功能完备的IPTV直播源管理系统&#xf…...

Python自动化爬取企查查企业工商信息的实战技巧

1. Python爬取企查查数据的核心思路 企查查作为国内权威的企业信息查询平台&#xff0c;包含了大量有价值的工商注册信息。对于金融、证券行业的从业者来说&#xff0c;经常需要批量获取这些数据进行分析。手动一个个查询不仅效率低下&#xff0c;还容易出错。这时候Python自动…...