当前位置: 首页 > 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…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...