QT Creator实现导出某数据库的某表格,导出的时候将表头写成中文

具体实现功能:
实现将某数据库内的某表格,导出为execl可以打开的表格文件,一般后缀为 .xls,我这里是在Ubuntu环境下演示的,Windows环境应该也OK

要实现这个功能,我们需要以下步骤:

1. 打开数据库并进行查询。
2. 创建Excel文件并写入表头和数据。
3. 保存Excel文件。

以下是将Demo写在了 main 当中
具体实现代码如下:
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlField>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 打开数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("/path/to/database.db");
    if (!db.open()) {
        QMessageBox::critical(nullptr, "Error", db.lastError().text());
        return -1;
    }

    // 执行查询
    QSqlQuery query("SELECT * FROM table_name", db);

    // 创建输出文件
    QString fileName = "/path/to/output.xls";
    QFile file(fileName);
    if (!file.open(QFile::WriteOnly | QFile::Truncate)) {
        QMessageBox::critical(nullptr, "Error", "Failed to create file");
        return -1;
    }

    // 写入表头
    QSqlRecord record = query.record();
    int columnCount = record.count();
    QString header;
    header.append("编号\t父编号\t名称\t级别\t路径名称\t描述\t发布时间\n"); // 表头中文,使用Tab符分隔
    file.write(header.toUtf8());

    // 写入数据
    QString content;
    while (query.next()) {
        for (int i = 0; i < columnCount; i++) {
            QSqlField field = record.field(i);
            QVariant value = query.value(i);
            content.append(value.toString());
            if (i != columnCount - 1) {
                content.append('\t');
            }
        }
        content.append('\n');
    }
    file.write(content.toUtf8());

    file.close();

    return 0;
}
其中,需要根据实际情况修改以下参数: - `/path/to/database.db`:数据库文件路径和文件名 - `table_name`:需要导出的表格名称 - `/path/to/output.xls`:输出的Excel文件路径和文件名 这段代码将从SQLite数据库中导出`table_name`表格的所有数据,写入Excel文件,并使用中文表头。Excel文件的格式为`xls`,可以使用Excel、WPS表格等多种软件打开。导出Excel的过程中,也可以使用其他第三方库和插件来实现,例如QXlsx、QtXlsxWriter等。


实际应用的时候封装在一个函数中:
// 引用就不写了

// 导出任务信息
void DataBank::ExportTaskInformation()
{
    QString dbName = "../mission_history.db";
    // 连接数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(dbName);
    if(!db.open())
    {
        qDebug() << "连接mission_history.db失败";
        return;
    }

    // 执行查询
    QSqlQuery query("SELECT * FROM mission_history", db);
    QFile file("mission_history.xls");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        qDebug() << "无法打开文件进行写入";
        return ;
    }

    // 创建输出流,写入表头
    QSqlRecord record = query.record();
    int columnCount = record.count();
    QString header;
    header.append("序号\t订单编号\t站点列表\t开始时间\t结束时间\t任务顺序\t下单方式\t任务状态\t组合信息\n"); // 表头中文,使用Tab符分隔
    file.write(header.toUtf8());

    // 写入数据
    QString content;
    while (query.next())
    {
        for (int i = 0; i < columnCount; i++)
        {
            QSqlField field = record.field(i);
            QVariant value = query.value(i);
            content.append(value.toString());
            if (i != columnCount - 1)
            {
                content.append('\t');
            }
        }
        content.append('\n');
    }
    file.write(content.toUtf8());

    file.close();
    db.close();

    qDebug() << "已将任务列表导出到 mission_history.xls";

    return ;
}

猜你喜欢

转载自blog.csdn.net/qq_39085747/article/details/129885728