找回密码
 立即注册
搜索
查看: 968|回复: 0

Qt Excel 库之 QtXlsx

[复制链接]

267

主题

0

回帖

1154

积分

管理员

积分
1154
发表于 2023-12-18 22:11:40 | 显示全部楼层 |阅读模式

简介

.xlsx(Excel Spreadsheet XML)是微软从 Microsoft Office Excel 2007 开始默认使用的一种文件格式的扩展名,该文件格式是一种基于 XML 的压缩文件格式。

QtXlsx 库独立地实现了对 Excel 文件的读写(不需要机器安装微软的 Excel 办公软件),它是由 dbzhang800(GitHub) 开发的。特点如下:

  • 可以跨平台使用
  • 创建、读取、修改 .xlsx 文档
  • 不支持早期的 .xls 文档格式(在我看来这倒不是缺点,丢下历史的包袱会轻松一点)

直接使用源代码的方式

若要将库的源代码直接用在你的工程中当然是没问题的,我一般会在工程的源文件文件夹创建一个第三方支持库文件夹 3rdparty,把库文件夹解压到其中:

    |-- project.pro
    |-- ....
    |-- 3rdparty\
    |     |-- qtxlsx\
    |     |

在项目的 qmake 文件 project.pro  中加入 qtxlsx.pri 文件:

include(3rdparty/qtxlsx/src/xlsx/qtxlsx.pri)

在需要使用该库的源代码中包含头文件 xlsxdocument.h 即可,举一个例子:

#include "xlsxdocument.h"

int main()
{
    QXlsx::Document xlsx;
    xlsx.write("A1", "Hello Qt!");
    xlsx.saveAs("Test.xlsx");
    return 0;
}

读和写是最基本的两类操作,而操作的基本对象则是单元格。单元格可以使用列号(英文字)加行号(数字)的字符串形式来访问,上例中的 A1 则表示第 A 列,第 1 行的单元格。也可以使用行、列数字序号的方式来访问:

QString str = xlsx.read(2, 3).toString();

它表示读取第 2 行 3 列单元格(需要注意:行列序号均是从 1 开始的)的内容并以字符串的形式赋值给 str。

使用扩展模块(Add-On modules)的方式

Qt 5 引入了模块化的概念,将众多功能归类到几个模块之中。我们常在 qmake 文件中写的 QT += core gui  serialport 表示的就是载入核心、图形、串口三个模块(Modules)。Qt 5 允许我们自定义模块并加入到 Qt 的模块库。以下为模块的构建和安装过程(编译过程需要 Perl 环境):

set path=C:\Qt\Qt5.5.0\5.5\mingw492_32\bin;C:\Qt\Qt5.5.0\Tools\mingw492_32\bin;%path%
qmake
mingw32-make docs install

可以将生成的文档 D:\QtXlsxWriter-master\doc\* 拷贝至 C:\Qt\Qt5.5.0\Docs\Qt-5.5,便于在需要帮助的时候查看文档。

使用模块时,在工程的 qmake 工程文件中加入模块:

QT += xlsx

在需要使用该库的源代码中包含头文件 QtXlsx 即可,举一个例子:

#include <QtCore>
#include <QtXlsx>

int main()
{
    QXlsx::Document xlsx("Test.xlsx");
    qDebug() << xlsx.read("A1");
    QXlsx::Cell *cell = xlsx.cellAt(1, 1);
    qDebug() << cell->value();
    return 0;
}

下载地址

Perl:  https://www.perl.org/get.html#win32
QtXlsx:  https://github.com/dbzhang800/QtXlsxWriter


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-11-21 16:52 , Processed in 0.017082 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表