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

Veil-Evasion项目演进与替代方案:从Veil-Evasion到Veil 3.0的迁移指南

Veil-Evasion项目演进与替代方案&#xff1a;从Veil-Evasion到Veil 3.0的迁移指南 【免费下载链接】Veil-Evasion Veil Evasion is no longer supported, use Veil 3.0! 项目地址: https://gitcode.com/gh_mirrors/ve/Veil-Evasion &#x1f6a8; 重要通知&#xff1a;V…...

利用 Taotoken 统一 API 为内部低代码平台集成 AI 能力

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用 Taotoken 统一 API 为内部低代码平台集成 AI 能力 为内部低代码平台引入 AI 能力&#xff0c;正成为提升平台自动化和智能化水…...

告别水下照片的蓝绿色偏:手把手教你用OpenCV和Python实现图像增强与色彩还原

告别水下照片的蓝绿色偏&#xff1a;手把手教你用OpenCV和Python实现图像增强与色彩还原 每次从潜水旅行回来&#xff0c;看着相机里那些本该绚丽多彩的珊瑚礁照片变成一片蓝绿色&#xff0c;总是让人感到沮丧。水下摄影爱好者、海洋生物研究者或是从事水下工程的专业人士都面临…...

离线语音技术如何重塑智能照明:从核心原理到产品实战

1. 从“在线”到“离线”&#xff1a;智能照明交互的范式转变作为一名在智能家居领域摸爬滚打了十来年的从业者&#xff0c;我亲眼见证了智能照明从最初的手机APP遥控&#xff0c;到后来的智能音箱联动&#xff0c;再到如今离线语音技术的兴起。每次技术迭代&#xff0c;都不仅…...

深度测评2026广州个体户核定流程精选榜单,革新个体工商户税务办理新变革

在数字经济浪潮席卷之下&#xff0c;个体工商户税务办理正面临前所未有的变革压力与机遇窗口。2026年的广州&#xff0c;作为电商与直播产业的高地&#xff0c;其个体户核定流程的效率与合规性&#xff0c;已成为衡量区域营商环境的试金石。然而&#xff0c;一个深层的价值悖论…...

学校AIGC检测标准差异解读:不同高校AI率标准对比2026年如何针对性免费处理完整指南

学校AIGC检测标准差异解读&#xff1a;不同高校AI率标准对比2026年如何针对性免费处理完整指南 同一段文字&#xff0c;不同平台检测AI率相差20%以上。这不是玄学&#xff0c;有原因可解释。 关于高校AIGC检测标准差异解读&#xff0c;理解了背后逻辑&#xff0c;很多「奇怪现…...

Cursor配置管理:使用符号链接与CLI实现多项目环境一键切换

1. 项目概述&#xff1a;为什么我们需要管理Cursor的配置&#xff1f;如果你和我一样&#xff0c;每天大部分时间都泡在Cursor这个AI驱动的代码编辑器里&#xff0c;那你肯定遇到过这样的场景&#xff1a;早上打开电脑&#xff0c;准备开始一个全新的前端项目&#xff0c;你熟练…...

告别Electron的臃肿:用NeutralinoJS + Vue 3,5分钟打造一个不到3MB的桌面应用

轻量化桌面应用开发实战&#xff1a;用NeutralinoJS与Vue 3构建3MB级工具 当现代前端开发者尝试进入桌面应用领域时&#xff0c;往往会遇到一个令人头疼的问题&#xff1a;为什么一个简单的记事本工具打包后竟超过100MB&#xff1f;这种困扰正是Electron等传统框架带来的"…...

新手也能玩转CTF内存取证:从Win7镜像到Volatility插件实战(附Gimp调图技巧)

新手也能玩转CTF内存取证&#xff1a;从Win7镜像到Volatility插件实战&#xff08;附Gimp调图技巧&#xff09; 当你第一次接触CTF比赛中的内存取证题目时&#xff0c;面对一个陌生的内存镜像文件和一堆专业工具&#xff0c;可能会感到无从下手。本文将带你从零开始&#xff0c…...

从激光雷达到智能家居:深入浅出聊聊激光安全分类(Class 1/2/3/4)那点事儿

从激光雷达到智能家居&#xff1a;深入浅出聊聊激光安全分类&#xff08;Class 1/2/3/4&#xff09;那点事儿 激光技术正悄然渗透进我们生活的每个角落——从自动驾驶汽车的"眼睛"到智能门锁的指纹识别&#xff0c;从工业切割到医疗美容&#xff0c;这些看似毫不相关…...