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简单,所以其慢慢的落幕不是没有道理的,网上可以找到很多资料,方法千奇百怪,但试过之后,方知只有那么一两种适合于自己,所以实践出真知,你我共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/135.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT + Opencv 实现灰度模板匹配

QT Opencv 实现灰度模板匹配 实现思路 1.模板创建代码思路 1 初始化和准备&#xff1a; 使用 cv::buildPyramid 函数构建图像金字塔。图像金字塔是一种多分辨率表示&#xff0c;每个层级的图像分辨率逐步降低。 调整 m_TemplData 的大小以匹配图像金字塔的层级数。 计算每…

深度学习知识点:LSTM

文章目录 1.应用现状2.发展历史3.基本结构4.LSTM和RNN的差异 1.应用现状 长短期记忆神经网络&#xff08;LSTM&#xff09;是一种特殊的循环神经网络(RNN)。原始的RNN在训练中&#xff0c;随着训练时间的加长以及网络层数的增多&#xff0c;很容易出现梯度爆炸或者梯度消失的问…

git提交

基本流程&#xff1a;新建分支 → 分支上开发(写代码) → 提交 → 合并到主分支 拉取最新代码因为当前在 master 分支下&#xff0c;你必须拉取最新代码&#xff0c;保证当前代码与线上同步&#xff08;最新&#xff09;&#xff0c;执行以下命令&#xff1a;bashgit pull orig…

Spring——自动装配

假设一个场景&#xff1a; 一个人&#xff08;Person&#xff09;有一条狗&#xff08;Dog&#xff09;和一只猫(Cat)&#xff0c;狗和猫都会叫&#xff0c;狗叫是“汪汪”&#xff0c;猫叫是“喵喵”&#xff0c;同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…

基于 JavaEE 的影视创作论坛

在当今数字化时代&#xff0c;影视创作论坛成为了影视爱好者们交流与分享的重要平台。本文将详细介绍基于 JavaEE 的影视创作论坛的设计与实现&#xff0c;让大家了解其背后的技术奥秘。 文末附有完整项目代码 该论坛具备丰富的功能&#xff0c;包括首页推荐、用户管理、影片管…

系统思考—因果关系

果的背后是因&#xff0c;因的背后是系统&#xff1a;我们遇到的每个结果&#xff0c;无论是企业的业绩问题&#xff0c;团队的效率问题&#xff0c;还是个人的情绪问题&#xff0c;都源于我们日积月累种下的因。这些因可能是错误的习惯、僵化的制度、还是短视的决策。 改变系…

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…

IDEA中创建maven项目

1. IDEA中创建maven项目 在IDEA中创建Maven项目&#xff0c;前提是已经安装配置好Maven环境。如还未配置安装Maven的&#xff0c;请先下载安装。如何下载安装&#xff0c;可参考我另外篇文章&#xff1a;maven的下载与安装教程本篇教程是以创建基于servlet的JavaWeb项目为例子&…

【C++入门】详解(中)

目录 &#x1f495;1.函数的重载 &#x1f495;2.引用的定义 &#x1f495;3.引用的一些常见问题 &#x1f495;4.引用——权限的放大/缩小/平移 &#x1f495;5. 不存在的空引用 &#x1f495;6.引用作为函数参数的速度之快&#xff08;代码体现&#xff09; &#x1f4…

django基于Python的电影推荐系统

Django 基于 Python 的电影推荐系统 一、系统概述 Django 基于 Python 的电影推荐系统是一款利用 Django 框架开发的智能化应用程序&#xff0c;旨在为电影爱好者提供个性化的电影推荐服务。该系统通过收集和分析用户的观影历史、评分数据、电影的属性信息&#xff08;如类型…

2024AAAI SCTNet论文阅读笔记

文章目录 SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation摘要背景创新点方法Conv-Former Block卷积注意力机制前馈网络FFN 语义信息对齐模块主干特征对齐共享解码头对齐 总体架构backbone解码器头 对齐损失 实验SOTA效果对比Cit…

_STM32关于CPU超频的参考_HAL

MCU: STM32F407VET6 官方最高稳定频率&#xff1a;168MHz 工具&#xff1a;STM32CubeMX 本篇仅仅只是提供超频&#xff08;默认指的是主频&#xff09;的简单方法&#xff0c;并未涉及STM32超频极限等问题。原理很简单&#xff0c;通过设置锁相环的倍频系数达到不同的频率&am…

python类和对象

一、什么是类和对象 类和对象一般是编程中较早接触到的比较抽象的概念&#xff0c;其实我们只要按照我们现实生活的实例去类比&#xff0c;就很好理解了 概念理解 我们可以把类比做是一个盖房子的图纸&#xff0c;对象比做是根据图纸去创建出来的一栋房子&#xff0c;这样每…

太原理工大学软件设计与体系结构 --javaEE

这个是简答题的内容 选择题的一些老师会给你们题库&#xff0c;一些注意的点我会做出文档在这个网址 项目目录预览 - TYUT复习资料:复习资料 - GitCode 希望大家可以给我一些打赏 什么是Spring的IOC和DI IOC 是一种设计思想&#xff0c;它将对象的创建和对象之间的依赖关系…

CNN Test Data

由于数据量过大&#xff0c;打不开了 搞一组小的吧。收工睡觉 https://download.csdn.net/download/spencer_tseng/90256048

Windows下调试Dify相关组件(2)--后端Api

1.部署依赖的服务&#xff08;代码最外层的docker目录&#xff09; 1.1 将middleware.env.example复制&#xff0c;并改名为middleware.env。 1.2 查看docker-compose.middleware.yaml&#xff0c;有5个服务 db&#xff1a;postgres数据库。 redis&#xff1a;redis缓存。 sa…

从预训练的BERT中提取Embedding

文章目录 背景前置准备思路利用Transformer 库实现 背景 假设要执行一项情感分析任务&#xff0c;样本数据如下 可以看到几个句子及其对应的标签&#xff0c;其中1表示正面情绪&#xff0c;0表示负面情绪。我们可以利用给定的数据集训练一个分类器&#xff0c;对句子所表达的…

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现 最近在学习鸿蒙开发过程中&#xff0c;阅读了官方文档&#xff0c;在之前做flutter时候&#xff0c;经常使用overlay&#xff0c;使用OverlayEntry加入到overlayState来做添加悬浮按钮、提示弹窗、加载中指示器、加载失败的t…

基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)

本篇技术博文摘要 &#x1f31f; 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤&#xff1b;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 &#x1f4d8; 在这个快速发展的技术时代&#xff0c;与时俱进是每个IT人的必修课。我…

DeepSeek:性能强劲的开源模型

deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型​ DeepSeek-V3 为自研 MoE 模型&#xff0c;671B 参数&#xff0c;激活 37B&#xff0c;在 14.8T token 上进行了预训练。 论…