文章介绍了如下内容:
1.QtXlsx是什么?
2.如何编译QtXlsx
3.如何配置QtXlsx
4.如何使用QtXlsx
5.总结
QtXlsx是什么?
QtXlsx是一个可以读取和写入Excel文件的第三方库。它不需要Microsoft Excel,可以在Qt5支持的任何平台上使用。它支持对.xlsx文件的创建、读取和编辑。
如何编译QtXlsx
第一步:下载Perl
地址:https://www.perl.org/get.html
第二步:下载QtXlsx的源码
地址:https://github.com/dbzhang800/QtXlsxWriter
下载完,解压后可以看到如下图这样的目录,用QT打开qtxlsx.pro文件
然后,进行编译,编译过程中会报一个错,找到报错的位置,把QList改成QVector,并在程序代码最前面加上#include <QVector>,这样就可以正常编译了。
如何配置QtXlsx
等待编译完成,在程序编译生成的文件夹里可以看到如下图的内容:
1、首先拷贝include目录下的QtXlsx目录到Qt的安装目录的include文件夹下,比如我的拷贝到:
E:\QT\setup\5.6\mingw49_32\include
2、接下来拷贝ib文件夹下Qt5Xlsxd.a Qt5Xlsx.a Qt5Xlsx.prl Qt5Xlsxd.prl4个文件到你的Qt的lib下:
E:\QT\setup\5.6\mingw49_32\lib
3、拷贝lib文件夹下的Qt5Xlsx.dll Qt5Xlsxd.dll库文件到你的Qt库路径下:
E:\QT\setup\5.6\mingw49_32\bin
4、拷贝 mkspecs\modules 文件夹下的qt_lib_xlsx.pri到你的Qt模块下
E:\QT\setup\5.6\mingw49_32\mkspecs\modules
接下来是最重要的一步,修改配置文件。
网上大多数教程都没有提及到这一点,所以我按照网上的教程编译、配置,最终却不能正常使用,我在网上下载了好多别人编译好的库,但是都不能正常使用,后来我通过对比这些别人编译好的库中的qt_lib_xlsx.pri文件才发现了不能正常使用的原因:路径没有配置对。
所以接下来你需要找到刚放到Qt的mkspecs\modules目录下的qt_lib_xlsx.pri文件然后用记事本打开它。
然后按照我以下的配置方式重写里面的内容:
QT_MODULE_BIN_BASE = D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/bin
QT_MODULE_INCLUDE_BASE = D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/include
QT_MODULE_IMPORT_BASE = D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/imports
QT_MODULE_QML_BASE = E:/QT/setup/5.6/mingw49_32/qml
QT_MODULE_LIB_BASE = D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/lib
QT_MODULE_HOST_LIB_BASE = D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/lib
QT_MODULE_LIBEXEC_BASE = D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/libexec
QT_MODULE_PLUGIN_BASE = D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/plugins
include(D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/mkspecs/modules-inst/qt_lib_xlsx.pri)
QT.xlsx.priority = 1
include(D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release/mkspecs/modules-inst/qt_lib_xlsx_private.pri)
QT.xlsx_private.priority = 1
我这里的D:/QtXlsx/build-qtxlsx-Desktop_Qt_5_6_1_MinGW_32bit-Release就是编译QtXlsx库生成的文件夹路径,如果有些文件夹在你的这里面没有,那么就自己新建一个。
重写完保存,到这里就配置完了。
如何使用QtXlsx
1、新建一个QT项目,在这个项目的.pro文件中加上这么一句话:
QT += xlsx
2、在你将要使用QXlsx类的.cpp或.h文件里加上:
#include <QtXlsx/QtXlsx>
3、接下来就是使用这个类,读取Excel数据了,示例代码:
//打开需要打开的excel文件,filePath为打开的文件名
QXlsx::Document xlsx("C:/Users/lenovo/Desktop/111/1.xlsx");
//获取Excel表格的范围
QXlsx::CellRange range = xlsx.dimension();
//获取打开文件的最后一行和最后一列(如果最后一行有空格也为有效行)
int rowCounts = range.lastRow ();
int colCounts = range.lastColumn ();
for(int i=1;i<=rowCounts;i++)
{
for(int j=1;j<=colCounts;j++)
{
QVariant a = xlsx.read (i,j);//读取文件相应的行列(注意xlsx读取的文件的起始行列从1开始)
qDebug()<<a.toString();
}
}
总结
QtXlsx有着非常亮眼的优点就是:它不需要计算机安装office就能对.xlsx文件进行操作,支持跨平台,光速读取数据。用过QAxObject或者ODBC读取Excel的人都知道,这两种方式读取Excel都会有几秒的延迟,我第一次用这两种方式的时候甚至都以为自己的程序写错了,程序好几秒都没反应,这给用户的体验相当不好,而QtXlsx恰巧就解决了这样一个痛点。
不过QtXlsx也有缺点,就是:只能操作.xlsx的Excel文件,第一次使用QtXlsx编译配置会消耗你很多时间。
但是总的来看,还是能用QtXlsx尽量用QtXlsx,因为速度和跨平台,这刚好切中了程序开发中两个比较重要的点,如果不能使用QtXlsx我们再考虑其他方式。
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}