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);/*保存*/
}