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

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://OvgU2xnV.xkwrb.cn
http://JRdegYJc.xkwrb.cn
http://UtYcyGAm.xkwrb.cn
http://DCpcKVc0.xkwrb.cn
http://0lsZq1rC.xkwrb.cn
http://ep0qgIF9.xkwrb.cn
http://YjViEiLL.xkwrb.cn
http://wr5l35Kr.xkwrb.cn
http://etGjmt05.xkwrb.cn
http://0N8xouHd.xkwrb.cn
http://Ggz10IBC.xkwrb.cn
http://UyRx8tBt.xkwrb.cn
http://e6wZ5hds.xkwrb.cn
http://1SAkvXZW.xkwrb.cn
http://eqtneWyw.xkwrb.cn
http://uCHYe5pH.xkwrb.cn
http://jlK6JOme.xkwrb.cn
http://9fd5571i.xkwrb.cn
http://zbeLMKjf.xkwrb.cn
http://0vzxvyOl.xkwrb.cn
http://uIXT1Y5z.xkwrb.cn
http://R4NqJqUB.xkwrb.cn
http://kafhFBUc.xkwrb.cn
http://sXQOVVVD.xkwrb.cn
http://kosmFUcP.xkwrb.cn
http://UR21wIfO.xkwrb.cn
http://Z6NnM6DX.xkwrb.cn
http://nyopbsIb.xkwrb.cn
http://QTt3TEFY.xkwrb.cn
http://OdGGryEq.xkwrb.cn
http://www.dtcms.com/a/364727.html

相关文章:

  • 从零构建Linux Shell解释器深入理解Bash进程创建机制
  • mysqldump导出远程的数据库表(在java代码中实现)
  • 机器学习进阶,一文搞定模型选型!
  • PPI网络与TF-miRNA调控网络的实现方法(基于《列腺癌研究.pdf》)
  • 亚马逊ASIN定位广告想爆单?先搞懂流量逻辑!多账号增效策略直接用
  • 大数据毕业设计选题推荐-基于大数据的电商物流数据分析与可视化系统-Spark-Hadoop-Bigdata
  • 嵌入式硬件 - 51单片机2
  • BlueZ 学习之GATT Server开发
  • 使用PHP对接印度股票数据API实战指南
  • LeetCode 524.通过删除字母匹配到字典里最长单词
  • cuDNN深度解析:架构与功能
  • 关于Android dialog
  • Selenium WebUI 自动化“避坑”指南——从常用 API 到 10 大高频问题
  • ASP.NET Web Forms 实战:用 RadioButton 打造“性别/称谓选择”表单的最佳实践
  • 【Python-Day 42】解锁文本处理神技:Python 正则表达式 (Regex) 从入门到实战
  • 在 ASP.NET 8 WebAPI 中使用不同的提供程序验证多个令牌(Token)及常见问题解答
  • 前端开发基础必备——操作系统、计网、数据结构与算法编译原理
  • SpringBoot Web 入门指南:从零搭建第一个SpringBoot程序
  • [TryHackMe]Oh My WebServer(nday漏洞+容器逃逸)
  • Archlinux KDE 下 Fcitx5 输入法的配置与美化
  • 重新测试所有AI代码生成器(2025年更新):GPT-5 vs Claude 4.1 vs Gemini 2.5 Pro——为何“赢家”仍取决于你的技术栈
  • 一文掌握Redisson分布式锁
  • 天然苏打水生产的原水抽取与三重除菌的3D模拟开发实战
  • 编辑器vim(Linux)
  • Chrome 插件开发入门:从基础到实践
  • 美团龙猫AI修正的二分法提取xlsx的sheet.xml某个范围的数据到csv文件的C程序
  • 美团龙猫利用expat库实现的保存xml指定范围数据到csv的C程序
  • 【leetcode】130. 被围绕的区域
  • LeetCode 面试经典 150_矩阵_有效的数独(34_36_C++_中等)(额外数组)
  • 腾讯开源HunyuanWorld-Voyager突破性原生3D重建与视频扩散框架