当前位置: 首页 > news >正文

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

一、参考和下载第三方库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);/*保存*/
}

三、测试效果

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

相关文章:

  • 怎么做网站数据库/网站seo推广计划
  • java script 做网站/云服务器免费
  • 软装设计网站有哪些/排名seo公司
  • 东莞网站制作支付通道/网站建设优化公司
  • 网站广告条怎么做/百度竞价排名名词解释
  • 东莞网站推广怎么样/百度上怎么注册店铺地址
  • DevOps利器之二(Git,Gitlab)
  • aws imagebuilder 理解并使用imagebuilder构建pcluster自定义ami
  • 关于ElasticSearch的那些事,面试常见问题
  • 浅析正则表达式+范围规则校验表达式+js从字符串中截取数字
  • 设计模式——代理模式
  • 左右双指针 - nSum问题
  • HTML知识梳理
  • 黑马学ElasticSearch(十二)
  • 初识 Django
  • C语言——语句与程序块
  • 装修--避坑--门
  • 【渗透测试】web端姿势-前端利用