QtXlsx 编译与使用
本文基于工程目录内的实际资料整理(源码包 qtxlsxwriter-master),并结合官方文档说明编写。
1. 什么是 QtXlsx
QtXlsx 是一个基于 Qt 的 Excel(.xlsx)读写库,不依赖 Microsoft Excel,可在 Qt 5 支持的任何平台使用。版本:0.3.0。
它支持三大能力:
新建.xlsx 文件(从零生成)
读取已有 .xlsx 文件的数据
编辑已有 .xlsx 文件
2. 下载
2.1 下载来源
| 项目 | 说明 |
|---|---|
| 源码包 | qtxlsxwriter-master.zip(即工程目录内已存放的压缩包,对应 GitHub 仓库的 master 分支) |
| 在线文档 | http://qtxlsx.debao.me |
| 许可证 | 见源码包内LICENSE(MIT 风格的开源许可) |
2.2 源码包内容
解压qtxlsxwriter-master.zip后得到:
qtxlsxwriter-master/ ├── src/xlsx/ # 核心库源码(含 qtxlsx.pri) ├── examples/xlsx/ # 示例工程(hello、demo、chart 等 20 个) ├── tests/ # 单元测试 ├── qtxlsx.pro # 顶层工程文件 ├── .qmake.conf # 模块版本定义(MODULE_VERSION = 0.3.0) └── README.md # 官方使用说明3. 编译(构建)
3.1 前置依赖
Qt 5(需含
qmake与对应编译器工具链)。Perl—— 仅在将 QtXlsx 编译为 Qt 的 addon 模块时需要。工程目录内已附带:
Perl/ActivePerl_5.16.2.3010812913.msi(安装包)Perl/windows下perl的安装和脚本的运行-百度经验.pdf(安装教程)
- Linux 下若 Qt 通过 apt 安装,需额外安装开发包
qtbase5-private-dev。
3.2 方式一:编译为 Qt5 的 addon 模块(可QT += xlsx引用)
在源码顶层目录执行(Windows 上进入对应 Qt 的qmake命令行环境):
qmake make # Windows/MSVC 下可执行 nmake 或 jom make install # 将库、头文件、mkspecs 安装到系统/Qt 目录辅助命令:
make html_docs # 生成库文档 make check # 运行单元测试Windows 注意:需要先进入 Qt 提供的命令行环境(如 “Qt 5.9.3 (MSVC2015 64bit)” ),确保
qmake、
nmake可用。
3.3 方式二:源码直接集成进工程(qmake 工程推荐)
把源码放到工程内(例如3rdparty/qtxlsx/),然后在工程.pro中:
include(3rdparty/qtxlsx/src/xlsx/qtxlsx.pri)或者把src/xlsx整个目录复制到你的工程源码路径下,直接:
include(qtxlsx.pri)若你的工程
不用 qmake
,需要手动定义宏
XLSX_NO_LIB。
3.4 本机已编译好的库(直接拿来用)
工程目录内已存在两份用Qt 5.9.3 + MSVC2015编译好的Debug版本(32 位与 64 位各一份):
| 目录 | 架构 |
|---|---|
build-qtxlsx-Desktop_Qt_5_9_3_MSVC2015_32bit-Debug | 32 位 |
build-qtxlsx-Desktop_Qt_5_9_3_MSVC2015_64bit-Debug | 64 位 |
每个构建目录内的产物结构:
build-qtxlsx-...-Debug/ ├── bin/ # Qt5Xlsx.dll(Release)、Qt5Xlsxd.dll(Debug) ├── include/QtXlsx/ # 头文件 + 版本 0.3.0 ├── lib/ # Qt5Xlsx.lib / Qt5Xlsxd.lib(导入库)、.exp、.pdb、.prl、cmake 配置 ├── mkspecs/modules/ # qmake 模块配置 qt_lib_xlsx.pri ├── examples/xlsx/ # 各示例的编译中间产物 └── tests/⚠️ 注意:
mkspecs/modules/qt_lib_xlsx.pri中记录的原始构建路径为
D:/CurPM/QtXlsx/...。若直接以 addon 方式使用这套库,需将对应路径修改为实际库所在位置,或将库安装到你的 Qt 目录后重新引用。
4. 使用
4.1 方式一:作为 Qt 模块使用(已make install)
工程.pro中:
QT += xlsx代码中使用统一头文件和命名空间:
#include <QtXlsx> int main() { QXlsx::Document xlsx; xlsx.write("A1", "Hello Qt!"); xlsx.saveAs("Test.xlsx"); return 0; }4.2 方式二:源码直接集成(include qtxlsx.pri)
工程.pro:
include(qtxlsx.pri)代码中直接包含xlsxdocument.h:
#include "xlsxdocument.h" int main() { QXlsx::Document xlsx; xlsx.write("A1", "Hello Qt!"); xlsx.saveAs("Test.xlsx"); return 0; }4.3 方式三:直接链接已编译好的库(不安装)
在.pro中手动指定:
# 以 64 位 Debug 为例,路径按实际调整 INCLUDEPATH += $$PWD/../QtXlsx/build-qtxlsx-Desktop_Qt_5_9_3_MSVC2015_64bit-Debug/include/QtXlsx LIBS += -L$$PWD/../QtXlsx/build-qtxlsx-Desktop_Qt_5_9_3_MSVC2015_64bit-Debug/lib -lQt5XlsxdDebug版链接
Qt5Xlsxd.lib,运行时需Qt5Xlsxd.dllRelease版链接
Qt5Xlsx.lib,运行时需Qt5Xlsx.dll运行时需把对应
bin/加入 PATH,或把 dll 拷贝到可执行文件旁;同时需要匹配的 Qt 5.9.3 MSVC2015 运行库。
5. 快速上手示例(来自 hello 示例)
examples/xlsx/hello/main.cpp展示了写入多种数据类型:
#include <QtCore> #include "xlsxdocument.h" int main() { QXlsx::Document xlsx; xlsx.write("A1", "Hello Qt!"); // 字符串 xlsx.write("A2", 12345); // 整数 xlsx.write("A3", "=44+33"); // 公式 xlsx.write("A4", true); // 布尔 xlsx.write("A5", "http://qt-project.org"); // 链接文本 xlsx.write("A6", QDate(2013, 12, 27)); // 日期 xlsx.write("A7", QTime(6, 30)); // 时间 xlsx.save(); // 保存为当前工作目录 xlsx 文件 return 0; }6. 示例工程一览
源码examples/xlsx/下共有20 个示例,可作为功能参考:
| 示例 | 演示功能 |
|---|---|
hello | 最基础写入 |
demo | 综合演示(写数据 / 样式 / 图表) |
calendar | 日历样式的表格生成 |
chart/chartsheet | 图表与图表工作表 |
conditionalformatting | 条件格式 |
datavalidation | 数据有效性 |
definename | 定义名称 |
documentproperty | 文档属性 |
extractdata | 读取Excel 数据 |
formulas | 公式 |
hyperlinks | 超链接 |
image | 插入图片 |
mergecells | 合并单元格 |
numberformat | 数字格式 |
richtext | 富文本 |
rowcolumn | 行列操作 |
style | 单元格样式 |
worksheetoperations | 工作表操作 |
xlsxwidget | 基于 Widget 的表格控件 |
构建目录
build-qtxlsx-.../examples/xlsx/<name>/中保留了各示例的编译中间产物(
.obj/.moc/及 Makefile),可直接用对应 Qt 环境重新生成可执行文件。
7. 常见问题与提示
依赖 Perl:仅 addon 方式编译需要;源码直接集成(方式二)不需要 Perl。
Debug / Release 区分:导入库和 dll 均带
d后缀表示 Debug 版,切勿混用。路径配置:使用已编译库时,务必把
include与lib路径指到本机实际目录;qt_lib_xlsx.pri里是构建机路径D:/CurPM/...,需要改写。运行时:生成的程序除 Qt 本身 dll 外,还需把
Qt5Xlsx.dll/Qt5Xlsxd.dll一并带上。不用 qmake 时:手动定义宏
XLSX_NO_LIB。跨平台:库本身不依赖 Excel,可跨 Qt 5 支持平台使用。