QT光速解析Excel——QtXlsx

qi.wei

发布于 2018.11.08 09:59 阅读 6328 评论 0

文章介绍了如下内容:

      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我们再考虑其他方式。