QT5使用cmakelists引入Qt5Xlsx库并使用

1、首先需要已经有了Qt5Xlsx的头文件和库,并拷贝到程序exe路径下(以xxx.exe/3rdparty/qtxlsx路径为例,Qt5Xlsx版本为0.3.0);
2、cmakelist中:

# 设置 QtXlsx 路径
set(QTXLSX_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qtxlsx)
set(QTXLSX_INCLUDE_DIR ${QTXLSX_ROOT_DIR}/include)
# 检查 QtXlsx 是否存在
if(NOT EXISTS ${QTXLSX_ROOT_DIR})message(FATAL_ERROR "QtXlsx directory not found at: ${QTXLSX_ROOT_DIR}")
endif()
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include${QTXLSX_INCLUDE_DIR}
)
# 根据构建类型选择库文件# Windows 系统set(QTXLSX_LIB_DEBUG ${QTXLSX_ROOT_DIR}/lib/Qt5Xlsxd.lib)set(QTXLSX_LIB_RELEASE ${QTXLSX_ROOT_DIR}/lib/Qt5Xlsx.lib)# 设置导入库目标add_library(QtXlsx SHARED IMPORTED)# 设置调试版属性set_target_properties(QtXlsx PROPERTIESIMPORTED_IMPLIB_DEBUG ${QTXLSX_LIB_DEBUG}IMPORTED_LOCATION_DEBUG ${QTXLSX_ROOT_DIR}/lib/Qt5Xlsxd.dllMAP_IMPORTED_CONFIG_MINSIZEREL ReleaseMAP_IMPORTED_CONFIG_RELWITHDEBINFO Release)# 设置发布版属性set_target_properties(QtXlsx PROPERTIESIMPORTED_IMPLIB_RELEASE ${QTXLSX_LIB_RELEASE}IMPORTED_LOCATION_RELEASE ${QTXLSX_ROOT_DIR}/lib/Qt5Xlsx.dll)#此处QtXlsx库的的名字需要与上面的名字一致target_link_libraries(MyProject PRIVATE Qt${QT_VERSION_MAJOR}::Widgets QtXlsx)

3、使用
需要包含头文件#include <QtXlsx/xlsxdocument.h>
1)读取数据:

		QXlsx::Document xlsx(file_name);// 获取第一个工作表QString sheetName = xlsx.sheetNames().value(0, "");auto ret = xlsx.selectSheet(sheetName);qDebug()<<"ret:"<<ret;// 获取当前工作表的最大行数和列数int rowCount = xlsx.dimension().rowCount();int colCount = xlsx.dimension().columnCount();//注意:若统计出来的行数、列数与肉眼看到的有差异,请滑动表格查看是否有数据项在视野外!!!// 遍历每一行std::map<int, std::vector<double>> data_map;for (int row = 1; row <= rowCount; ++row){std::vector<double> data_row;for (int col = 1; col <= colCount; ++col){bool ok{false};double data = xlsx.read(row, col).toDouble(&ok);//根据实际数据类型转换if (!ok)break;data_row.push_back(data);}if (data_row.size() == DATA_SIZE)//DATA_SIZE 自定义列宽,可去掉此判断{data_map.emplace(row,data_row);}}
2)保存数据
void MyProject::SaveDataToXlsFile(QMap<int, QPair<QString, QString>> data, QString name)
{if (data.empty())return;QString text = QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss");text = name + "_" + text;QString file_name = "./Output/" + text + ".xlsx";QFile file(file_name);if (file.exists()) {file.remove();}QXlsx::Document xlsx;QXlsx::Format fmt_header;//设置表头格式fmt_header.setFontSize(15);fmt_header.setVerticalAlignment(QXlsx::Format::AlignVCenter);fmt_header.setHorizontalAlignment(QXlsx::Format::AlignHCenter);fmt_header.setPatternBackgroundColor(QColor(211, 211, 211));fmt_header.setFontBold(true);fmt_header.setTextWarp(true);QXlsx::Format fmt_body;//fmt_body.setFontSize(15);fmt_body.setVerticalAlignment(QXlsx::Format::AlignVCenter);fmt_body.setHorizontalAlignment(QXlsx::Format::AlignHCenter);fmt_body.setTextWarp(true);xlsx.write(1, 1, "Col1", fmt_header);xlsx.write(1, 2, "Col2", fmt_header);xlsx.write(1, 3, "Col3", fmt_header);auto rows = data.size();int row = 0;for (auto iter = data.begin(); iter != data.end(); ++iter){auto zone = iter.key();auto data_double = iter.value();xlsx.write(row + 2, 1, row + 1, fmt_body);//数据项行数xlsx.write(row + 2, 2, data_double.first, fmt_body);xlsx.write(row + 2, 3, data_double.second, fmt_body);++row;}if (xlsx.saveAs(file_name)) {QMessageBox::information(nullptr, "提示", "保存成功到" + file_name);// QDesktopServices::openUrl(QUrl::fromLocalFile(file_name));//可选择是否自动打开}else {QMessageBox::information(nullptr, "提示", "保存失败");}
}

4、其他
使用qt的文件功能弹出窗口,让用户选择文件:

#include <QFileDialog>QString filePath = QFileDialog::getOpenFileName(nullptr,                            // 父窗口"选择文件",                         // 标题"./",                   // 默认打开路径"Excel文件(*.xlsx)"  // 文件过滤器);if (!filePath.isEmpty()) {qDebug() << "已选择文件:" << filePath;// 在这里处理选中的文件} else {qDebug() << "用户取消选择";}

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

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

相关文章

醋酸镨:闪亮的稀土宝藏,掀开科技应用新篇章

一、什么是醋酸镨醋酸镨是一种镨的有机盐&#xff0c;镨是稀土金属元素之一。作为一种重要的稀土化合物&#xff0c;醋酸镨通常以水合物的形式存在&#xff0c;呈现淡黄色或无色结晶。镨元素本身因其独特的物理化学特性&#xff0c;在工业和科技领域有着广泛应用&#xff0c;而…

深入解析JVM内存结构与垃圾回收机制

java是强类型高级语言JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是Java平台的核心组件&#xff0c;它是一个虚拟的计算机&#xff0c;能够执行Java字节码&#xff08;bytecode&#xff09;。1、区域划分JVM对Java内存的管理也是分区分块进行&…

Java 流程控制详解:从顺序执行到跳转语句,掌握程序逻辑设计

作为一名Java开发工程师&#xff0c;你一定知道&#xff0c;流程控制&#xff08;Flow Control&#xff09; 是编写任何程序的核心。它决定了代码的执行路径、分支走向和循环次数。本文将带你系统梳理 Java中的所有常用流程控制结构&#xff0c;包括&#xff1a;顺序结构分支结…

面试150 环形链表

思路 采用双指针法,slow指针每次走一步,fast指针每次走两步&#xff0c;如果相遇的情况下&#xff0c;slow指针回到开始的位置,此时快慢指针各走一步&#xff0c;当相遇的时候也就是说明链表中有环。 # Definition for singly-linked list. # class ListNode: # def __init…

AI技术正在深度重构全球产业格局,其影响已超越工具属性,演变为推动行业变革的核心引擎。

一、AI如何重塑AI的工作与行业&#xff08;AI助手领域&#xff09;能力升级理解与生成&#xff1a;基于LLM&#xff08;大语言模型&#xff09;&#xff0c;AI能处理开放式问题、撰写报告、翻译代码&#xff0c;替代部分人类知识工作。个性化交互&#xff1a;通过用户历史对话分…

Kafka的无消息丢失配置怎么实现

那 Kafka 到底在什么情况下才能保证消息不丢失呢&#xff1f; Kafka 只对“已提交”的消息&#xff08;committed message&#xff09;做有限度的持久化保证。 第一个核心要素是“已提交的消息”。什么是已提交的消息&#xff1f;当 Kafka 的若干个 Broker 成 功地接收到一条…

集成CommitLInt+ESLint+Prettier+StyleLint+LintStaged

代码可读性低代码 代码规范落地难代码格式难统一代码质量低下 配置 ESLint ESLint 是一个用来识别 ECMAScript 并且按照规则给出报告的代码检测工具&#xff0c;使用它可以避免低级错误和统一代码的风格。它拥有以下功能&#xff1a; 查出 JavaScript 代码语法问题。根据配置…

寻找两个正序数组的中位数(C++)

给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (mn)) 。示例 1&#xff1a;输入&#xff1a;nums1 [1,3], nums2 [2] 输出&#xff1a;2.00000 解释&#x…

Expected Sarsa 算法的数学原理

&#x1f31f; 一、Expected Sarsa 算法的数学原理 1. 什么是 Expected Sarsa&#xff1f; Expected Sarsa 是一种基于 时序差分&#xff08;Temporal Difference, TD&#xff09;学习 的强化学习算法&#xff0c;用于估计 动作值函数 ( q_{\pi}(s, a) )。它是 Sarsa 算法的一种…

Vue的watch和React的useEffect

参考文章&#xff1a;https://zhuanlan.zhihu.com/p/686329898

idea中合并git分支

1.把本地dev代码合并到本地master代码在提交代码之前&#xff0c;先确保dev和master都拉取了最新的代码都进行了Git->pull了这时候确保Local的第一个分支是master分支&#xff0c;然后选择dev分支 ,鼠标右键-》Merge dev into master这时候会提示 有合并到本地master最新的代…

《Spring 中上下文传递的那些事儿》Part 7:异步任务上下文丢失问题详解

&#x1f4dd; Part 7&#xff1a;异步任务上下文丢失问题详解 在现代 Java 应用中&#xff0c;异步编程已经成为提升性能、解耦业务逻辑的重要手段。无论是使用 CompletableFuture、线程池&#xff08;ExecutorService&#xff09;、定时任务&#xff08;ScheduledExecutorSe…

大语言模型驱动智能语音应答:技术演进与架构革新

在智能客服、电话银行等场景中&#xff0c;用户时常遇到这样的困境&#xff1a;“请描述您的问题...抱歉没听清&#xff0c;请重试...正在为您转接人工”。传统语音应答&#xff08;IVR&#xff09;系统受限于规则引擎与浅层语义理解&#xff0c;难以应对复杂多变的自然语言表达…

【Linux】内存管理

要求&#xff1a;1、编写程序&#xff0c;实现如下功能。&#xff08;1&#xff09;随机生成 1000000 个 0~1 之间的数&#xff1b;&#xff08;2&#xff09;统计分析这些数据&#xff0c;计算均值、方差和分布情况&#xff0c;分布情况按0.01 的步长进行统计&#xff1b;&…

苍穹外卖—day1

文章目录前言一、接口文档导入与生成二、前端环境搭建三、后端环境搭建1. 了解项目结构2. 环境搭建常见问题总结前言 &#xff08;简要说明笔记的目的&#xff1a;记录搭建过程、关键配置和结构理解&#xff09; 一、接口文档导入与生成 Apifox 导入 使用工具&#xff1a;https…

基于微信小程序的在线疫苗预约小程序源码+论文

基于微信小程序的在线疫苗预约系统源码论文代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》800套 《SSM网站项目》1200套 《小程序项目》600套…

Windows 11 安装过程中跳过微软账户创建本地账户

背景 在 Windows 11 的安装和设置过程中&#xff0c;Microsoft 账号登录是默认的认证方式。然而&#xff0c;在某些情况下&#xff0c;可能需要绕过此步骤以创建本地账户。 微软在 2025 年 3 月推送的 Windows 11 预览版&#xff08;Build 26120.3653 和 Build 26200.5516&am…

利用DBeaver实现异构数据库数据定时任务同步

1、背景 本需求需要实现抽取KingBaseEs数据库的某几张表数据&#xff0c;定时同步到MySQL中 2、工具准备 2.1 DBeaverEE25.1(必须要企业版&#xff0c;如果用社区版没有定时任务功能) https://dbeaver.io/download/ 2.2 KingBaseEs数据库及驱动 https://www.kingbase.com…

【TCP/IP】1. 概述

1. 概述1. 概述1.1 因特网及技术催生新时代1.1.1 信息化时代1.1.2 关键技术1.1.3 国家战略1.2 网络互联的动机和技术1.2.1 网络互联的动机1.2.2 网络互联技术1.3 因特网的形成和发展1.3.1 国际因特网发展轨迹1.3.2 中国互联网发展1.4 有关因特网的组织机构1.5 请求注解&#xf…

中老年人的陪伴,猫咪与机器人玩具有什么区别?

在人口结构深度老龄化的背景下&#xff0c;中老年群体的精神需求与情感陪伴已成为重要的社会议题。猫咪作为活生生的伴侣动物&#xff0c;与日新月异的智能陪伴机器人&#xff0c;代表了两种截然不同的情感慰藉路径——前者承载着生命互动的温度与责任&#xff0c;后者则彰显了…