Qt导出数据到excel

Qt导出数据到excel,方法有很多,Qt里也有自带的axcontainer模块中的#include<QAxObject>类可以导出数据到excel,但是这种方法依赖于你电脑上打开excel的软件,可能换一台电脑就不能正常运行,使用库函数起来也比较麻烦而且导出数据的速度贼慢(亲身体验过),这种方式还是不建议用的。
推荐使用第三方库导出数据,这里我用的是 使用 xlsx库操作excel表格
下载QtXlsx类,这是下载地址
关于这个库的使用方法有两种使用方法:
1.使用Xlsx作为Qt5的附加模块,(注意:此步骤需要下载安装Perl
2. 直接使用源代码。

1.使用Xlsx作为Qt5的附加模块

参考链接

1.首先,需要下载安装Perl5这是地址

2.根据你Qt版本下载对应版本,现在大部分都用64位的了。(要匹配),ActivePerl-5.22.1.2201-MSWin32-x64-299574.msi,下载好了之后就一直默认安装即可。安装好了在打开你的Qt(笔者使用的是Qt5.6.0 msvc版本)和下载的上面下载的QtXlsx代码

3.开始编译QtXlsx代码,编译成功后,在你编译的目录下回生成lib文件和需要包含的文件(include)还有一个模块pri文件,这里有我直接编译生成好的文件,
链接:https://pan.baidu.com/s/18K_OAVVUsmTwAkSi3vuI0w
提取码:9w4f

在这里插入图片描述
4.添加这些文件到你的Qt的库中
(1) 拷贝 include文件下的文件到你的Qt安装目录D:\Qt\Qt5.7.0\5.7\mingw53_32\include (直接copy,无需修改任何内容)

(2)拷贝lib文件夹下Qt5Xlsxd.lib Qt5Xlsx.lib Qt5Xlsx.prl Qt5Xlsxd.prl 4个文件到你的Qt的lib下 D:\Qt\Qt5.7.0\5.7\mingw53_32\lib

(3)拷贝lib文件夹下的Qt5Xlsx.dll Qt5Xlsxd.dll 库文件到你的Qt库路径下 D:\Qt\Qt5.7.0\5.7\mingw53_32\bin

(4)拷贝 mkspecs\modules 文件夹下的qt_lib_xlsx.pri到你的Qt模块下
D:\Qt\Qt5.7.0\5.7\mingw53_32\mkspecs\modules

5.qt使用qxlsx:

pro文件里面加上 QT += xlsx

下面是示例代码:

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

2.直接使用QtXlsx源代码(推荐)

该软件包包含一个qtxlsx.pri文件,它允许您将组件集成到使用qmake进行构建步骤的应用程序中。

1.下载源代码

2.将下载目录底下的src目录下的xlsx目录全部拷贝放在你要添加的项目目录(和pro文件同一级)中。
3.将以下行添加到你的项目中的pro文件中:

INCLUDEPATH += $$PWD xlsx
include(xlsx/qtxlsx.pri)

4.保存后,然后就可以在你的项目工程中看到多了一个qtxlsx的目录。
在这里插入图片描述
5.使用(应用实例)

#include"xlsxdocument.h"
#include "xlsxformat.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"


    QXlsx::Document xlsx;
    QXlsx::Format format1;/*设置该单元的样式*/
    format1.setFontColor(QColor(Qt::red));/*文字为红色*/
    format1.setPatternBackgroundColor(QColor(152,251,152));/*北京颜色*/
    format1.setFontSize(15);/*设置字体大小*/
    format1.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
    format1.setBorderStyle(QXlsx::Format::BorderDashDotDot);/*边框样式*/
    xlsx.write("A1", "Hello Qt!", format1);/*写入文字,应该刚才设置的样式*/
    xlsx.write(2, 1, 12345, format1);/*写入文字,应该刚才设置的样式*/
    QXlsx::Format format2;/*重新设置另一个单元的样式*/
    format2.setFontBold(true);/*设置加粗*/
    format2.setFontUnderline(QXlsx::Format::FontUnderlineDouble);/*下双划线*/
    format2.setFillPattern(QXlsx::Format::PatternLightUp);/*填充方式*/
    xlsx.write("A4", "=44+33", format2);/*写入文字,应该刚才设置的样式*/
    xlsx.write("C4", true, format2);
    if(!xlsx.selectSheet("ziv")){/*在当前打开的xlsx文件中,找一个名字为ziv的sheet*/
        xlsx.addSheet("ziv");//找不到的话就添加一个名为ziv的sheet
    }
    for (int i=10; i<20; ++i) {/*写入一串数字*/
        xlsx.write(i, 1, i*i*i);   //A10:A19
        xlsx.write(i, 2, i*i); //B10:B19
        xlsx.write(i, 3, i*i-1); //C10:C19
    }
    QXlsx::Chart *pieChart = xlsx.insertChart(3, 5, QSize(300, 300));/*在3行5列的位置插入一个图标*/
    pieChart->setChartType(QXlsx::Chart::CT_Pie);/*插入一个饼形图*/
    pieChart->addSeries(QXlsx::CellRange("A10:A19"));/*饼形图添加数据*/
    pieChart->addSeries(QXlsx::CellRange("B10:B19"));
    pieChart->addSeries(QXlsx::CellRange("C10:C19"));
    QXlsx::Chart *barChart = xlsx.insertChart(3, 13, QSize(300, 300));/*在3行13列的位置插入一个图标*/
    barChart->setChartType(QXlsx::Chart::CT_Bar);/*条形图*/
    barChart->addSeries(QXlsx::CellRange("A10:C19"));/*给条形图加入数据*/
    xlsx.saveAs("book1.xlsx");/*保存*/
    QXlsx::Document xlsx2("Book1.xlsx");/*复制book1到book2*/
    xlsx2.saveAs("Book2.xlsx");
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐