Qt使用第三方库QXlsx将数据库的数据导出为Excel表格

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、参考和下载第三方库QXlsx

参考1
这篇博客对第三方库QXlsx介绍的比较详细。

1、概述

QXlsx是一个可以读写Excel文件的库。不依赖office以及wps组件可以在Qt5支持的任何平台上使用。

2、使用方式

(1) QXlsx可以编译为静态库库使用可以提升项目编译速度也可以让项目代码量更少不用一打开工程就几十个文件
(2) 直接将QXlsx.pri加入代码中使用我比较推荐直接使用源码因为QXlsx的注释信息基本在cpp文件中可以通过阅读源码和注释来学习QXlsx的功能当然如果你已经熟悉了QXlsx的使用方式那编译成库使用会更方便可以使工程的代码量变少

3、下载第三方库QXlsx

准备好git工具下载第三方库QXlsx。
QXlsx
在这里插入图片描述

在这里插入图片描述在这里插入图片描述 git clone https://gitcode.net/mirrors/QtExcel/QXlsx.git
在这里插入图片描述在这里插入图片描述
将开源项目QXlsx中的文件QXlsx拷贝到Qt项目文件当前目录下。

在这里插入图片描述Qt工程文件中.pro文件加上以下内容

# 添加QXlsx库文件
include($$PWD/QXlsx/QXlsx.pri)
INCLUDEPATH += $$PWD/QXlsx

在这里插入图片描述

二、参考代码

参考2
这篇博客对于介绍如何通过while(query.next())遍历的形式导出sqlite数据库中全部的数据到Excel上介绍地比较详细。
重点参考2中博主的代码很好用我稍微优化了一下由于sqlite数据库数据导出成Excel数据是对数据库进行查找所有的数据然后通过遍历的方法将一行一行的数据库数据写入到Excel文件中。如果涉及对数据库的各种操作最好进行加锁加互斥锁然后对数据库资源操作完成之后解锁解互斥锁并且清除对数据库的操作释放资源query.clear()

void MainWindow::on_buttonPrint_3_clicked()
{
    QXlsx::Document xlsx;
    QXlsx::Format title_format; /*设置标题的样式*/
    QXlsx::Format format2;/*小标题样式*/
    QXlsx::Format format3;/*数据内容样式*/
    title_format.setBorderStyle(QXlsx::Format::BorderThin);//外边框
    format2.setBorderStyle(QXlsx::Format::BorderThin);//外边框
    format3.setBorderStyle(QXlsx::Format::BorderThin);//外边框
    xlsx.setRowHeight(1,1,25);/*设置标题行高*/
    xlsx.setColumnWidth(1,5,20);/*设置列宽一共5列参数*/

    title_format.setFontSize(11);
    title_format.setFontColor(QColor(Qt::red));
    title_format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);
    title_format.setVerticalAlignment(QXlsx::Format::AlignVCenter);
    xlsx.mergeCells("A1:E1",title_format);//合并1~5列写入标题
    xlsx.write("A1","Experimental Data");

    format2.setFontColor(QColor(Qt::blue));
    format2.setHorizontalAlignment(QXlsx::Format::AlignHCenter);
    xlsx.write("A2", "时间", format2);/*写入文字应该刚才设置的样式*/
    xlsx.write("B2", "甲烷浓度(%)", format2);
    xlsx.write("C2", "二氧化碳浓度(%)", format2);
    xlsx.write("D2", "入口压力(MPa)", format2);
    xlsx.write("E2", "流量计1示数(SCCM)", format2);

    format3.setHorizontalAlignment(QXlsx::Format::AlignHCenter);

    requestAccessToken();//对数据库操作加互斥锁
    QSqlQuery query;
    QString selectSql="select * from dataTab;";//重点从数据库中导出
    query.exec(selectSql);
    int i=3;
    while(query.next())//一行一行遍历
    {
        xlsx.write(i,1,query.value(0).toString(),format3);
        qDebug()<<query.value(0).toString();
        xlsx.write(i,2,query.value(1).toDouble(),format3);
        xlsx.write(i,3,query.value(2).toDouble(),format3);
        xlsx.write(i,4,query.value(3).toDouble(),format3);
        xlsx.write(i,5,query.value(4).toDouble(),format3);
        i++;
    }
    query.clear();//遍历完所有数据库中的行数据库释放对数据库的查询操作
    releaseAccessToken();//对数据库操作进行解锁

    //设置excel表格的默认文件名为"Student Information-当前时间"
    QString current_date =QDateTime::currentDateTime().toString(Qt::ISODate);
    QString fileName=tr("Experimental Data-")+current_date;
    QString dir=QString("../%1").arg(fileName);
    QString dir1=dir.replace(QRegExp(":"),"-");
    /*??QFSFileEngine::open: No file name specified*/
    QString path = QFileDialog::getSaveFileName(this, tr("save"), dir1, "XLSX(*.xlsx)");
    xlsx.saveAs(path);/*保存*/
}

三、测试效果

在这里插入图片描述在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 数据库