Qt讀寫Excel--QXlsx基本使用

1、概述

Document 類是一個用于操作 XLSX 文件的類,繼承自 QObject。它提供了對 Excel 文件的讀寫操作,包括單元格的讀寫、圖片和圖表的插入、單元格合并、列和行的格式化、數據驗證和條件格式化等功能。此外,它還支持對工作簿和工作表的操作,如添加、刪除、重命名工作表等。這個類可以用于創建、編輯和保存 XLSX 文件,也可以將 XLSX 文件的內容保存為 CSV 格式。

2、重要方法

  • explicit Document(QObject *parent = nullptr):默認構造函數,創建一個空的 Document 對象。

  • Document(const QString &xlsxName, QObject *parent = nullptr):通過指定 XLSX 文件名創建 Document 對象。

  • Document(QIODevice *device, QObject *parent = nullptr):通過指定 QIODevice 創建 Document 對象,用于從內存設備讀取或寫入 XLSX 文件。

  • ~Document():析構函數,釋放 Document 對象。

  • bool write(const CellReference &cell, const QVariant &value, const Format &format = Format()):向指定單元格寫入值,并可選地設置格式。

  • bool write(int row, int col, const QVariant &value, const Format &format = Format()):向指定行列的單元格寫入值,并可選地設置格式。

  • QVariant read(const CellReference &cell) const:讀取指定單元格的值。

  • QVariant read(int row, int col) const:讀取指定行列的單元格的值。

  • int insertImage(int row, int col, const QImage &image):在指定位置插入圖片。

  • bool getImage(int imageIndex, QImage &img):根據圖片索引獲取圖片。

  • bool getImage(int row, int col, QImage &img):根據行列位置獲取圖片。

  • uint getImageCount():獲取圖片數量。

  • Chart *insertChart(int row, int col, const QSize &size):在指定位置插入圖表。

  • bool mergeCells(const CellRange &range, const Format &format = Format()):合并指定范圍的單元格,并可選地設置格式。

  • bool unmergeCells(const CellRange &range):拆分已合并的單元格。

  • bool setColumnWidth(const CellRange &range, double width):設置指定列范圍的寬度。

  • bool setColumnFormat(const CellRange &range, const Format &format):設置指定列范圍的格式。

  • bool setColumnHidden(const CellRange &range, bool hidden):設置指定列范圍是否隱藏。

  • bool setRowHeight(int row, double height):設置指定行的高度。

  • bool setRowFormat(int row, const Format &format):設置指定行的格式。

  • bool setRowHidden(int row, bool hidden):設置指定行是否隱藏。

  • QStringList sheetNames() const:獲取所有工作表的名稱。

  • bool addSheet(const QString &name, AbstractSheet::SheetType type = AbstractSheet::ST_WorkSheet):添加一個工作表。

  • bool insertSheet(int index, const QString &name, AbstractSheet::SheetType type = AbstractSheet::ST_WorkSheet):在指定位置插入一個工作表。

  • bool selectSheet(const QString &name):選擇指定名稱的工作表。

  • bool selectSheet(int index):選擇指定索引的工作表。

  • bool renameSheet(const QString &oldName, const QString &newName):重命名工作表。

  • bool copySheet(const QString &srcName, const QString &distName = QString()):復制工作表。

  • bool moveSheet(const QString &srcName, int distIndex):移動工作表。

  • bool deleteSheet(const QString &name):刪除工作表。

  • bool save() const:保存當前的 XLSX 文件。

  • bool saveAs(const QString &xlsXname) const:將當前的 XLSX 文件保存為指定名稱。

  • bool saveAs(QIODevice *device) const:將當前的 XLSX 文件保存到指定的 QIODevice

  • bool saveAsCsv(const QString mainCSVFileName) const:將當前的 XLSX 文件保存為 CSV 格式。

  • bool isLoadPackage() const:檢查是否已加載 XLSX 文件。

  • bool load() const:加載 XLSX 文件。

3、移植QXlsx源碼

github下載:點擊跳轉

csdn下載:點擊跳轉

下載后如下圖所示:里面的QXlsx為我們需要用到的源碼,其它的為一些官方的示例代碼:

打開QXlsx文件夾后如下圖所示:通過QXlsx.pro打開可以編譯為動態庫使用,在程序里加載QXlsx.pri可以直接使用源碼。

將QXlsx源碼文件夾拷貝到創建的Qt工程路徑下(也可以是其它路徑):

4、demo

在工程的.pro文件中添加下列代碼:

include($$PWD/QXlsx/QXlsx.pri)             # QXlsx源代碼
INCLUDEPATH += $$PWD/QXlsx
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include "xlsxdocument.h"QXLSX_USE_NAMESPACE            // 添加Xlsx命名空間MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowTitle("QXlsx基本讀寫Excel");//創建一個excel文件Document xlsx;                      // 初始化后默認有一個sheet1//doc.addSheet("第一個sheet", AbstractSheet::ST_WorkSheet);  // 添加第一個sheet,如果不添加則會有一個默認的bool ret = xlsx.saveAs("./1.xlsx"); // 保存到EXCEL_NAME,如果已經存在則覆蓋if(ret){qInfo() << "創建excel成功!";}else{qWarning() << "創建excel失敗!";}//打開文件Document *m_xlsx = new Document("./1.xlsx", this);if(m_xlsx->load())  // 判斷文件是否打開成功(也可以使用isLoadPackage){qInfo() << "excel打開成功!";}else{qWarning() << "excel打開失敗!";}//將數據寫入excel
#if 0m_xlsx->write("A2", 123);         // 從A1開始m_xlsx->write("B2", 0.001);m_xlsx->write("C2", "abc");m_xlsx->write("D2", true);m_xlsx->write("E2", "你好");
#elsem_xlsx->write(1, 1, 456);        // 從1,1開始m_xlsx->write(1, 2, 0.002);m_xlsx->write(1, 3, "aaa");m_xlsx->write(1, 4, false);m_xlsx->write(1, 5, "你好");
#endifif(m_xlsx->save()){qInfo() << "數據寫入成功!";}else{qWarning() << "數據寫入失敗!";}//讀取excel中所有數據int rowLen = m_xlsx->dimension().rowCount();           // 獲取最大行數int columnLen = m_xlsx->dimension().columnCount();     // 獲取最大列數for(int i = 1; i <= rowLen; i++)                       // 遍歷每一行{QString data = QString("第%1行:").arg(i);for(int j = 1; j <= columnLen; j++)                // 遍歷每一個單元格(列){
#if 1QVariant value = m_xlsx->read(i, j);                                         // 通過單元格行號、列號讀取數據
#elseQVariant value = m_xlsx->read(QString("%1%2").arg((char)(64 + i)).arg(j));   // 通過單元格引用讀取數據
#endifif(!value.isNull()){data.append(value.toString()).append(" ");}else{data.append("NULL ");}}qInfo() << data;}//將數據另存到2.xlsxif(m_xlsx->saveAs("./2.xlsx")){qInfo() << "另存為2.xlsx";}else{qWarning() << "文件另存為失敗!";}
}

點擊掃碼加入群聊

覺得有幫助的話,打賞一下唄。。

? ? ? ? ? ?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95439.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

P13929 [藍橋杯 2022 省 Java B] 山 題解

縮減一下題目的意思&#xff0c;問區間 [2022,2022222022] 有多少個數是回文數并且先單調不減&#xff0c;后單調不增。 因為有這兩條條件&#xff0c;我們可以得知在判斷時只用判斷前半段的每個數是不是和對面相應的位置相等&#xff0c;以及是否單調不減。 為什么不用看后半段…

Unity Android 文件的讀寫

配置AndroidManifest 文件在Assets 目錄下查找AndroidManifest 文件&#xff0c;添加權限聲明&#xff0c;在application 節點中添加requestLegacyExternalStorage 屬性。<!-- 權限聲明 --> <uses-permission android:name"android.permission.READ_EXTERNAL_STO…

Pydantic模型驗證測試:你的API數據真的安全嗎?

url: /posts/03b2afdf35f55dbaef631710ab6da82c/ title: Pydantic模型驗證測試:你的API數據真的安全嗎? date: 2025-09-03T23:46:18+08:00 lastmod: 2025-09-03T23:46:18+08:00 author: cmdragon summary: Pydantic在FastAPI中用于數據驗證和序列化,通過Python類型注解自動…

【Proteus仿真】AT89C51單片機中斷系列仿真——INT0中斷控制LED小燈/INT0和INT1中斷控制數碼管

目錄 0案例視頻效果展示 0.1例子1&#xff1a;INT0控制LED閃爍 0.2例子2&#xff1a;INT0中斷控制數碼管計數 0.3例子3&#xff1a;INT0中斷實現秒表功能 0.4例子4&#xff1a;INT0INT1中斷控制數碼管計數 1基礎知識補充——中斷系統 1.1 中斷源一覽 1.2 控制寄存器 1…

MTK Linux DRM分析(三十三)- MTK mtk_mipi_tx.c

一、MIPI PHY驅動簡介 1. MIPI 協議分層 應用層:顯示(DSI)、攝像頭(CSI)。 協議層:定義像素/圖像幀如何封裝成數據包。 物理層(PHY):具體電氣信號傳輸方式 —— 這里就是 D-PHY 或 C-PHY。 2. D-PHY(Differential PHY) 傳輸方式:差分信號(類似 LVDS/USB/PCIe …

G2D 圖形加速器

文章目錄G2D 圖形加速器1. 功能簡介1.1 矩形填充1.2 旋轉和鏡像 (rotate and mirror)1.3 透明度混合1.4 colorkey1.5 縮放 (Stretchblt)2. G2D 框架3. 全志 G2D 使用示例3.1 使用G2D實現圖像旋轉縮放3.2 實時預覽中加入旋轉縮放功能G2D 圖形加速器 G2D模塊主要實現圖像旋轉、數…

【FPGA】單總線——DS18B20

目錄 項目&#xff1a;項目&#xff08;含quartus工程、仿真文件&#xff09; 1. 單總線通信時序詳解 1.1 初始化&#xff08;復位脈沖 存在脈沖&#xff09; 1.2 寫時隙&#xff08;寫“0”和寫“1”&#xff09; 1.3 讀時隙 2. DS18B20 暫存器與溫度數據格式 2.1 暫存…

JUC的安全并發包機制

目錄 1. Lock機制&#xff1a;明鎖控制 2. 柵欄機制(CyclicBarrier) 3. 閉鎖機制(CountDownLatch) 4. 信號量機制(Semaphore) 5. 無鎖機制 1. Lock機制&#xff1a;明鎖控制 Lock接口提供了比synchronized更靈活的鎖機制&#xff0c;屬于明鎖&#xff08;需要手動獲取和釋…

開源企業級快速開發平臺(JeecgBoot)

JeecgBoot 是一款基于 Spring Boot Vue 技術棧的開源企業級快速開發平臺&#xff0c;旨在通過「低代碼代碼生成」模式降低企業級應用的開發成本&#xff0c;提升開發效率。其核心定位是“開箱即用的中后臺解決方案”&#xff0c;覆蓋權限管理、表單報表、工作流、代碼生成等核…

探索 PostgreSQL 和 MySQL 之間的主要差異和相似之處,找到滿足您項目需求的最佳數據庫解決方案。

探索 PostgreSQL 和 MySQL 之間的主要差異和相似之處&#xff0c;找到滿足您項目需求的最佳數據庫解決方案。 探索 PostgreSQL 和 MySQL 之間的主要差異和相似之處&#xff0c;找到滿足您項目需求的最佳數據庫解決方案。 關系數據庫已經存在了很長時間。事實上&#xff0c;關系…

如何畫時序圖、流程圖、狀態流轉圖

如何畫時序圖、流程圖、狀態流轉圖流程圖符號約定時序圖元素交互框最佳實踐狀態流轉圖在研發或者寫技術方案的時候&#xff0c;我們經常會畫各種圖。圖比文字更加容易理解一些&#xff0c;那么如何畫出優秀好看的圖呢下面簡單介紹一些畫圖時需要注意的點 流程圖 流程圖是流程…

CSDN 與 掘金 高效學習指南

CSDN 和掘金&#xff08;juejin.cn&#xff09;是國內最活躍的技術社區&#xff0c;但信息量巨大、質量參差不齊。高效運用的關鍵是&#xff1a;從“被動瀏覽”轉向“主動獲取”&#xff0c;避免陷入“收藏一堆文章卻學不會”的陷阱。 以下是為你量身定制的CSDN 與 掘金 高效學…

容器tomcat鏡像制作

pull-tomcat鏡像 docker pull tomcat啟動 –security-opt 禁用默認的安全策略&#xff0c;放寬限制 docker run -d --name mysql-tomcat -p 8080:8080 --security-opt seccompunconfined tomcat:latest進入容器直接訪問404&#xff0c;網頁相關的webapps下面為空&#xff0c;將…

AC安全認證方式全解析

AC的幾種安全認證方法認證方式 安全性 便捷性 典型應用場景 所需配置Portal認證 ??中 高 訪客網絡、商場、 Portal服務 酒…

《壘球江西百科》男子壘球世界紀錄·壘球9號位

男子壘球世界紀錄終極盤點? | 冷知識科普&#xff01;1. 最遠本壘打距離 | Longest Home Run Distance紀錄保持者&#xff1a; Jeff Hall (美國)距離&#xff1a; 643英尺 (約196米)賽事&#xff1a; 2012年 USSSA 慢投壘球錦標賽? 科普&#xff1a; 慢投壘球中&#xff0c;球…

設計模式六大原則2-里氏替換原則

肯定有不少人跟我剛看到這項原則的時候一樣&#xff0c;對這個原則的名字充滿疑惑。其實原因就是這項原則最早是在1988年&#xff0c;由麻省理工學院的一位姓里的女士&#xff08;Barbara Liskov&#xff09;提出來的。定義1&#xff1a;如果對每一個類型為 T1的對象 o1&#x…

Spring Security 深度學習(五): 過濾器鏈與自定義過濾器

目錄1. 引言&#xff1a;揭開Spring Security的內部奧秘2. Spring Security 過濾器鏈核心機制2.1 DelegatingFilterProxy&#xff1a;整合Spring與Servlet容器2.2 FilterChainProxy&#xff1a;管理安全過濾器鏈的“總管”2.3 Security Filters&#xff1a;核心安全功能的承載者…

微軟GraphRAG 端到端使用及自用工具類

文章目錄一. 環境準備1.安裝 Python 環境2.安裝依賴3.配置 LLM API Key二. 初始化項目三. 文檔上傳 & 索引構建四. 問答&#xff08;CLI 方式&#xff09;示例&#xff1a;五. 代碼中調用 GraphRAG工具概覽核心工具詳解1. simple_graphrag_integration.py - 智能問答核心2.…

sqlserver2008導入excel表數據遇到的問題

1.如果表格為.xlsx格式時可能會提示“沒有為此鏈接管理提供列”&#xff0c;無法點擊下一步的話&#xff0c;建議可以使用.csv格式 .csv格式可能也會存在此提示&#xff0c;但是可以不用管 2.導入.csv數據時&#xff0c;字段為int時&#xff0c;填null導入不進去的話可以給個0作…

Unity游戲打包——打包流程

本文由 NRatel 歷史筆記整理而來&#xff0c;如有錯誤歡迎指正。一、基本流程二、組合步驟把上述每步做成獨立的輸入輸出邏輯 y fuc(x)然后&#xff0c;控制/組合其過程&#xff0c;可靈活產生不同的流程&#xff1a;1、單渠道出測試包2、單渠道出正式包3、單渠道包熱更三、構…