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
英文地址,請注明出處:http://en.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;后者則彰顯了…