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

2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉

文章目录

  • 1. 导入QXlsx库
  • 2. 使用 QXlsx库 读取 .xlsx 文件
  • 小结

  网上有很多教程,但太费劲了,这里有个非常简便的好方法,分享给大家。

1. 导入QXlsx库

转载链接 :https://github.com/QtExcel/QXlsx/blob/master/HowToSetProject.md

以下是使用 QXlsx 的一种简便方法。
此方法仅适用于 qmake,若使用 cmake,请查看其他文档。
这里介绍在 Windows 系统下的应用方法。

设置步骤
1️⃣ 从 GitHub 克隆源代码
git clone https://github.com/j2doll/QXlsx.git

2️⃣ 打开 Qt Creator
如果你不知道如何使用 Qt Creator,请访问 Qt 公司网站:https://www.qt.io/qt-features-libraries-apis-tools-and-ide/

3️⃣ 创建你自己的 Qt 项目。

4️⃣ 示例是控制台应用程序。

5️⃣ 设置项目名称。当前项目名称是 HelloQXlsx。

6️⃣ HelloQXlsx 项目已创建。

7️⃣ 项目当前所在目录

8️⃣ 将 QXlsx 代码复制到你的应用项目中
xcopy c:\workspace\github\QXlsx\QXlsx c:\workspace\HelloQXlsx /s/e
主要复制这四个内容
QXlsx中需要复制到项目中的内容

9️⃣ 项目当前的目录与文件

🔟 在你的 Qt 项目(*.pro 文件)中添加 QXlsx 库相关代码

应用 Qt 项目的 QXlsx 代码

QXLSX_PARENTPATH=./ # 当前 QXlsx 路径是.. 表示当前目录)
QXLSX_HEADERPATH=./header/ # 当前 QXlsx 头文件路径是./header/
QXLSX_SOURCEPATH=./source/ # 当前 QXlsx 源文件路径是./source/
include (./QXlsx.pri)

1️⃣1️⃣ 为示例设置头文件和命名空间,然后添加 “Hello World” 代码。

//main.cpp
#include <QCoreApplication>
#include "xlsxdocument.h"
#include "xlsxchartsheet.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"
using namespace QXlsx;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QXlsx::Document xlsx;// 将 “Hello Qt!” 写入单元格 (A,1),这是共享字符串。xlsx.write ("A1", "Hello Qt!"); xlsx.saveAs ("Test.xlsx"); // 将文档保存为 “Test.xlsx”return 0;// return a.exec();
}

1️⃣2️⃣ 构建并运行项目

1️⃣3️⃣ 会创建一个可执行文件(*.exe)和一个 Excel 文件(.xlsx)。

2. 使用 QXlsx库 读取 .xlsx 文件

#include "mainwindow.h"#include <QApplication>
#include "xlsxdocument.h"
#include "xlsxchartsheet.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"
using namespace QXlsx;#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();QString filePath = "Test.xlsx";// 创建QXlsx::Document对象并加载文件QXlsx::Document xlsx(filePath);// 检查文件是否成功加载if (xlsx.isLoadPackage()) {int sheetCount = xlsx.workbook()->sheetCount();for (int sheetIndex = 0; sheetIndex < sheetCount; ++sheetIndex) {QXlsx::Worksheet *sheet = dynamic_cast<QXlsx::Worksheet*>(xlsx.workbook()->sheet(sheetIndex));if (sheet) {int rowCount = sheet->dimension().lastRow();int columnCount = sheet->dimension().lastColumn();for (int row = 1; row <= rowCount; ++row) {for (int column = 1; column <= columnCount; ++column) {std::shared_ptr<QXlsx::Cell> cell = sheet->cellAt(row, column);if (cell) {QString value = cell->value().toString();qDebug() << "Sheet" << sheetIndex << "Cell(" << row << "," << column << "):" << value;}}}}}} else {qDebug() << "文件加载失败";}return a.exec();
}

这段 C++ 代码主要实现了一个使用 Qt 框架结合QXlsx库来读取 Excel 文件的功能,同时启动了一个 Qt 图形界面应用程序,以下是详细解释:

  1. 头文件包含

    • #include "mainwindow.h":引入主窗口类的头文件,推测这个程序还关联了一个图形化的主窗口界面。
    • #include <QApplication>:这是 Qt 应用程序的基础类,用于管理 GUI 应用程序的控制流和主要设置,每个 Qt GUI 程序都需要一个QApplication对象。
    • 接下来一系列#include "xlsxdocument.h" 等头文件,它们来自QXlsx库,用于操作 Excel 文件,提供了诸如文档、工作表、单元格范围、图表、富文本字符串以及工作簿相关的类定义。
    • using namespace QXlsx;:使用QXlsx命名空间,这样后续代码使用该库中的类时,无需再显式写出命名空间前缀。
    • #include <QDebug>:引入用于调试输出的头文件。
  2. 主函数main

    • QApplication a(argc, argv);:创建QApplication对象,argcargv是程序启动时的命令行参数,这一步初始化了 Qt 的应用程序环境,为后续的图形界面展示和事件处理做准备。
    • MainWindow w;w.show();:实例化MainWindow类对象,并调用show方法显示主窗口,这部分是用于展示图形化界面的常规操作。
  3. Excel 文件读取部分

    • QString filePath = "Test.xlsx";:定义要读取的 Excel 文件路径,这里指定文件名为Test.xlsx

    • QXlsx::Document xlsx(filePath);:创建QXlsx::Document对象,尝试加载指定路径的 Excel 文件。

    • if (xlsx.isLoadPackage()):检查文件是否成功加载,如果加载成功,后续代码开始遍历读取文件内容;否则,输出 “文件加载失败” 的调试信息。

    • int sheetCount = xlsx.workbook()->sheetCount();:获取工作簿中的工作表数量,xlsx.workbook()返回工作簿对象,sheetCount()获取工作表总数。

    • 接下来的嵌套 for 循环:

      • 外层循环遍历每个工作表索引sheetIndex

      • QXlsx::Worksheet *sheet = dynamic_cast<QXlsx::Worksheet*>(xlsx.workbook()->sheet(sheetIndex));:通过dynamic_cast将抽象工作表指针转换为具体的Worksheet指针,确保后续操作是针对正确类型的工作表。

      • 内层两个嵌套for 循环遍历每个工作表的行和列:

        • int rowCount = sheet->dimension().lastRow();int columnCount = sheet->dimension().lastColumn(); 获取当前工作表的行数和列数。
        • std::shared_ptr<QXlsx::Cell> cell = sheet->cellAt(row, column);:获取指定行列位置的单元格,这里返回的是智能指针。
        • if (cell):判断单元格是否存在,如果存在,将其值转换为QString类型并输出,输出格式包含工作表索引、行列信息和单元格的值。
  4. 程序返回
    return a.exec();:进入 Qt 应用程序的事件循环,等待用户操作(如关闭窗口、点击按钮等),程序会持续运行直到用户触发退出事件,之后返回系统,结束程序。

小结

  万事开头难,QT库的配置没有python简单,所以其慢慢的落幕不是没有道理的,网上可以找到很多资料,方法千奇百怪,但试过之后,方知只有那么一两种适合于自己,所以实践出真知,你我共勉。

相关文章:

2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉

文章目录 1. 导入QXlsx库2. 使用 QXlsx库 读取 .xlsx 文件小结 网上有很多教程&#xff0c;但太费劲了&#xff0c;这里有个非常简便的好方法&#xff0c;分享给大家。 1. 导入QXlsx库 转载链接 &#xff1a;https://github.com/QtExcel/QXlsx/blob/master/HowToSetProject.md…...

React中createRoot函数原理解读——Element对象与Fiber对象、FiberRootNode与HostRootNode

【2024最新版】React18 核心源码分析教程&#xff08;全61集&#xff09; Element对象与Fiber对象 在 React 中&#xff0c;Element 对象 和 Fiber 对象 是核心概念&#xff0c;用于实现 React 的高效渲染和更新机制。以下是它们的详细解读&#xff1a; 1. Element 对象 定…...

利用Python实现Union-Find算法

Union-Find&#xff08;又称 并查集&#xff09;是一种高效解决 动态连通性问题 的算法。它主要提供两种操作&#xff1a; Union(x, y)&#xff1a;将元素 x 和 y 连接。Find(x)&#xff1a;找到元素 x 所属的集合的标识符&#xff08;通常是集合的根节点&#xff09;。 常用…...

【LeetCode: 912. 排序数组 + 归并排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

AI时代来了,我们不再需要IDE了

大家好&#xff0c;我是编程乐趣。 最近在思考一个问题&#xff0c;那就是AI这么强大。 未来有没有可能&#xff0c;我们就不需要不需要开发工具了&#xff0c;只需一个浏览器就可以开发软件了。 一、AI带来的变化 1、代码生成与补全 AI工具如GitHub Copilot等能够根据代码…...

PL/SQL语言的网络编程

PL/SQL语言的网络编程 引言 在信息化迅速发展的今天&#xff0c;网络编程作为现代软件开发的重要组成部分&#xff0c;受到了广泛关注。而在数据库管理系统中&#xff0c;Oracle 提供了 PL/SQL&#xff08;Procedural Language/Structured Query Language&#xff09;&#x…...

vue video重复视频 设置 srcObject 视频流不占用资源 减少资源浪费

// 直接设置srcObject减少获取视频流&#xff1a;通过 captureStream() 方法从下方视频元素获取视频流。 // 设置 srcObject&#xff1a;将获取到的视频流设置为上方视频的 srcObject 减少资源浪费 // 获取到需要复制到的dom元素 const firstVideoElement proxy.$refs.firs…...

JavaFx 21 项目Markdown 预览、编辑、新建、文件树、删除、重命名

项目文件结构 项目的源代码和资源文件存放在以下路径: 源代码: src/main/java/com/kong/markdown/ 包含多个 Java 文件,主要实现了应用的功能: App.java:主类,可能包含应用的启动逻辑。FileService.java:可能与文件操作相关的服务类。MainController.java:控制器类,可…...

git项目提交步骤(简洁版)

1.创建仓库 2.填写 信息 3.点击这个按钮 4.找到要上传的文件&#xff0c;在目录内右键点击 5.依次执行命令 在命令窗口中输入&#xff1a;git init 复制仓库地址&#xff1a; 在命令窗口中输入&#xff1a;git remote add origin 仓库地址 在命令窗口中输入&#xff1a;…...

风水算命系统架构与功能分析

系统架构 服务端&#xff1a;Java&#xff08;最低JDK1.8&#xff0c;支持JDK11以及JDK17&#xff09;数据库&#xff1a;MySQL数据库&#xff08;标配5.7版本&#xff0c;支持MySQL8&#xff09;ORM框架&#xff1a;Mybatis&#xff08;集成通用tk-mapper&#xff0c;支持myb…...

Clojure语言的学习路线

Clojure语言的学习路线 Clojure是一种现代的Lisp方言&#xff0c;运行于Java虚拟机&#xff08;JVM&#xff09;上。它具备强大的函数式编程特性&#xff0c;支持并发和多线程编程&#xff0c;适合处理复杂的数据和计算任务。由于其简洁和灵活的语法&#xff0c;Clojure在数据…...

网络安全核心目标CIA

网络安全的核心目标是为关键资产提供机密性(Confidentiality)、可用性(Availablity)、完整性(Integrity)。作为安全基础架构中的主要的安全目标和宗旨&#xff0c;机密性、可用性、完整性频频出现&#xff0c;被简称为CIA&#xff0c;也被成为你AIC&#xff0c;只是顺序不同而已…...

Wi-Fi Direct (P2P)原理及功能介绍

目录 Wi-Fi Direct &#xff08;P2P&#xff09;介绍Wi-Fi Direct P2P 概述P2P-GO&#xff08;P2P Group Owner&#xff09;工作流程 wifi-Direct使用windows11 wifi-directOpenwrtwifi的concurrent mode Linux环境下的配置工具必联wifi芯片P2P支持REF Wi-Fi Direct &#xff…...

Perl语言的数据结构

Perl语言的数据结构 Perl是一种功能强大的、灵活的脚本语言&#xff0c;广泛用于文本处理、系统管理、网络编程以及许多其他领域。其灵活性不仅体现在语法上&#xff0c;还体现在其丰富的数据结构上。本文将深入探讨Perl的主要数据结构&#xff0c;包括标量、数组、哈希以及引…...

【MFC】设置CTreeCtrl单个节点的文字颜色

问题 功能调整需要依据不同状态设置树控件中单个节点的文字颜色。 分析 1、CTreeCtrl本身有设置文字颜色的接口SetTextColor&#xff0c;但是这个接口是设置树控件整体的文字颜色。 2、在自定义接口可以对树控件单个节点进行更新文字颜色和背景颜色&#xff0c;接收自定义绘制…...

【CSS】设置滚动条样式

文章目录 基本语法用法案例 基本语法 在CSS中&#xff0c;可以使用 ::-webkit-scrollbar 和相关伪元素来为滚动条设置样式&#xff0c;但请注意这些伪元素是非标准的&#xff0c;主要用于WebKit内核浏览器&#xff08;如Chrome、Safari&#xff09;。 ::-webkit-scrollbar CSS …...

Gitlab-Runner配置

原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务&#xff0c;如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信&#xff0c;接收作业并提交到执行队列&#xff0c;Gitlab-Runner从队列中获取作业&#xff0c;并允许在不同环境下进行作…...

代码随想录 哈希 test 8

18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 与三数之和类似&#xff0c;重点在剪枝和去重的区别&#xff0c;由于target可正可负&#xff0c;因此需要分两种情况讨论&#xff0c;如果target为正&#xff0c;则若当前选择的元素之和大于target&#xff0c;需要跳出这…...

[SAP ABAP] 使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数据

使用 LOOP AT...ASSIGNING FIELD-SYMBOL... 可以直接修改内表中的数据&#xff0c;而不需要先将内表数据复制到相应的工作区&#xff0c;然后再更新回内表中&#xff0c;从而提高性能 针对上述代码进行优化&#xff0c;我们使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数…...

MySQL数据导出导入

一、数据导出 1.导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines--default-character-setutf8 --lock-all-tables --add-drop-database -A >db.all.sql 2.导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...