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

一、运行结果

Qt使用Qtxlsx导出excel结果

二、实现

1.pro文件

加入如下语句:

QT += sql
include(xlsx/qtxlsx.pri)

2.代码

#include "widget.h"
#include "ui_widget.h"
#include "xlsxdocument.h"
#include "xlsxformat.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include <QDateTime>
#include <QFileDialog>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}
//点击导出excel按钮
void Widget::on_pushButton_clicked()
{
	//SQLite数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("../myExcel/test.db");
    /*mysql连接*/
//    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
//    db.setHostName("127.0.0.1");
//    db.setUserName("root");
//    db.setPassword("123456");
//    db.setDatabaseName("Graduation");
    //打开数据库
    if(!db.open())
    {
        QMessageBox::warning(this, "error", db.lastError().text());
        qDebug()<<QString("fail!!!!!!!!!");
        //return;
    }
    else
    {
        QMessageBox::information(this, "数据库", "数据库连接成功!");
        qDebug()<<QString("success!!!!!!!!!");
    }

    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","Student Information");

    format2.setFontColor(QColor(Qt::blue));
    format2.setHorizontalAlignment(QXlsx::Format::AlignHCenter);
    xlsx.write("A2", "name", format2);/*写入文字,应该刚才设置的样式*/
    xlsx.write("B2", "age", format2);
    xlsx.write("C2", "ID", format2);
    xlsx.write("D2", "birthday", format2);
    xlsx.write("E2", "hobby", format2);

    format3.setHorizontalAlignment(QXlsx::Format::AlignHCenter);
    QSqlQuery query;
    QString selectSql="select * from StuInfo;";
    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).toInt(),format3);
        xlsx.write(i,3,query.value(2).toInt(),format3);
        xlsx.write(i,4,query.value(3).toString(),format3);
        xlsx.write(i,5,query.value(4).toString(),format3);
        i++;
    }
    //设置excel表格的默认文件名为"Student Information-当前时间"
    QString current_date =QDateTime::currentDateTime().toString(Qt::ISODate);
    QString fileName=tr("Student Information-")+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);/*保存*/
	db.close();
}
  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值