使用QtXlsx保存数据至Execl表格

    最近需要做一个小工具,通过某种算法把一定的数据计算出来,然后保存到一个Execl表格里,因为涉及到Execl表格,我只好强迫自己回忆起的多年前入了门的QT,为了加深一点印象,稍微记录一下方法,分享同时也给自己留个底

 

     我用的是Qt5.5.0,Qt只要去官网下载安装就可以了,Qt5以上的版本官方都有封装好的类QtXlsx可以用,用这个类有个好处,就是跨平台而且速度相对较快(不过我用的原因只是不懂其他怎么做而已..)。

   有好处就会有坏处,这个类官方SDK的模块里好像是没有的,需要自己手动添加,而且Qt环境要有Perl5,实际上我不明白这个东西是干啥的,但是如果没有,工程是编译不过去滴~

   地址:https://www.perl.org/get.html

  选择系统版本,因为我只会在windows下使用QT,linux反而不会(因为当初入门QT就是在windows下),所以这里我选择windows使用QtXlsx保存数据至Execl表格_第1张图片

 

使用QtXlsx保存数据至Execl表格_第2张图片

   

     这里据说要选对版本,由于我根本不知道这玩意是干什么的,我选了个最新的(而且好像系统位数还是向下兼容的?)

 

使用QtXlsx保存数据至Execl表格_第3张图片

   下载之后安装即可,安装过程就是一直点next,选项选择默认或者高亮的即可,具体是做什么我也不懂!(佛系)

安装好之后,就算把环境搞好了。

 

 

   接下来,需要下载QtXlsx类的源码,地址:https://github.com/dbzhang800/QtXlsxWriter

    实际上这个页面也有官方的说明,英文好的可以看一下还算简单易懂。

 

    下载完成后,大概有这么一堆东西

    使用QtXlsx保存数据至Execl表格_第4张图片

 

 

    用QT打开这个qtxlsx.pro工程,直接点击构建(编译)即可。这里我很顺利的编过去了,但是据说QT5.6.0 以上是会出错的,如果编译出错了,可以尝试将出错地方的QList换成QVector,这个可以在网上找一下解决方案。

    编译完成后,构建路径下会有这些东西:

    使用QtXlsx保存数据至Execl表格_第5张图片

   

 

    需要用的是划线部分

    首先把上图的include文件夹下的所有文件拷贝到QT安装路径下的include路径下

使用QtXlsx保存数据至Execl表格_第6张图片

   整个拷贝到QT安装路径下的include路径下

使用QtXlsx保存数据至Execl表格_第7张图片

例如我电脑的路径:C:\Qt\Qt5.5.0\5.5\mingw492_32\include

   

    再把lib下的库文件,拷到QT安装路径的lib下,我这里是.a的静态库,也有可能是.lib库,只要拷贝对应的库和对应的.prl文件即可:

使用QtXlsx保存数据至Execl表格_第8张图片

QT安装路径对应的lib下:

使用QtXlsx保存数据至Execl表格_第9张图片

 

使用QtXlsx保存数据至Execl表格_第10张图片

 

然后再把.dll的库文件拷贝到QT安装路径的bin目录下:

使用QtXlsx保存数据至Execl表格_第11张图片

安装路径下的bin目录:

使用QtXlsx保存数据至Execl表格_第12张图片

最后,拷贝 mkspecs\modules 目录下的qt_lib_xlsx.pri文件到QT安装路径下的对应路径下:

使用QtXlsx保存数据至Execl表格_第13张图片

QT安装路径下:

使用QtXlsx保存数据至Execl表格_第14张图片

拷贝完之后,就可以开始码自己的代码啦,新建一个工程,在工程.pro文件里添加QT+= xlsx 就可以用xlsx模块啦!

使用QtXlsx保存数据至Execl表格_第15张图片

 

当然,对应的文件里要包含头文件

#include 

接下来是QtXlsx类的简单用法示例:

 

    QXlsx::Document xlsx;
    QStringList titleList;
    QString filePathName;
    QString defaultFileName = "Test.xls";
 
    // 设置保存的默认文件名称
    QFileInfo fileinfo(defaultFileName);
    
 
    // 获取保存文件路径
    QFileDialog *fileDlg = new QFileDialog(this);
    fileDlg->setWindowTitle("保存文件");
    fileDlg->setAcceptMode(QFileDialog::AcceptSave);
    fileDlg->selectFile(z_defaultFileName);
    fileDlg->setNameFilter("Excel Files(*.xls *.xlsx)");
    fileDlg->setDefaultSuffix("xls");
 
    if (fileDlg->exec() == QDialog::Accepted)//点击保存
    {
        filePathName = fileDlg->selectedFiles().at(0);
    }
    else//取消
    {
        return -1;
    }
    // 保存文件添加后缀名
    fileinfo =  QFileInfo(filePathName);
    if (fileinfo.suffix() != "xls" && fileinfo.suffix() != "xlsx")
    {
        filePathName += ".xls";
    }
 
    // 设置excel表头(第一行数据)
    titleList << "列1" << "列2" << "列3" << "列4" << "列5" << "列6" << "列7";
    for (int i = 0; i < titleList.size(); i++)
    {
        xlsx.write(1, i+1, titleList.at(i));//这里写第一行,第n列数据
    }
 
    // 设置列宽
    xlsx.setColumnWidth(1, 20);//第一行,20列宽
    
 
    //开始写第n行数据
    xlsx.write(2,1,"Test1");//第二行第一列为Test1
 
    // 最后,保存文件
    xlsx.saveAs(z_filePathName);

    return 0;

 

   代码大部分都是参考这个大哥写的,可以看一下https://www.cnblogs.com/wangjian8888/p/9176662.html

 

   希望对你有所帮助,如果有请你不要吝啬分享给他人哦!赠人玫瑰,手有余香。

 

 

 

 

你可能感兴趣的:(QT)