GPT问答:在Ubuntu系统中,利用QtCreator的QSqlQuery语句,连接到其他目录的mission_history.db数据库,并将其中的名为 mission 表单,以xls格式导出

问题原文:

麻烦实现一下,在Ubuntu系统中,利用QtCreator的 QSqlQuery语句,连接到其他目录的mission_history.db 数据库,并将其中的名为 mission 表单,以xls格式导出到当前路径下

GPT回复:

可以按照以下步骤进行:

1. 在QtCreator中打开项目,选择 "File" -> "New File or Project" -> "Application" -> "Qt Widgets Application",命名为 "export-db"。

2. 在项目树中,右键选择 "Add New" -> "Cpp File",命名为 "main.cpp"。

3. 在 "main.cpp" 中添加以下代码:

```cpp
#include <QCoreApplication>
#include <QtSql>

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

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    QString dbPath = "/path/to/mission_history.db"; //将此路径替换成实际路径
    db.setDatabaseName(dbPath);

    if (!db.open()) {
        qDebug() << "Failed to open database:" << dbPath;
        return 1;
    }

    QSqlQuery query("SELECT * FROM mission");
    QSqlRecord record = query.record();

    QFile file("mission.xls");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug() << "Failed to open file for writing.";
        return 1;
    }

    QTextStream out(&file);
    QStringList headers;
    for (int i = 0; i < record.count(); i++) {
        headers << record.fieldName(i);
    }

    out << headers.join(", ") << "\n";

    while (query.next()) {
        QStringList values;
        for (int i = 0; i < record.count(); i++) {
            values << query.value(i).toString();
        }
        out << values.join(", ") << "\n";
    }

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

    qDebug() << "Exported mission table to mission.xls";

    return 0;
}
```

4. 将 `#将此路径替换成实际路径` 替换成实际的数据库路径。

5. 在项目树中,右键选择 "Add Existing Directory",选择要导出 "mission" 表单的目录。

6. 在 "export-db.pro" 文件中添加以下代码:

```qmake
QT += core sql
```

7. 运行程序,Excel文件将保存在当前目录下。

注意事项:

1. 需要安装 QtSql,可以在项目的 "export-db.pro" 文件中添加 `QT += sql` 以进行安装。
2. 如果需要导出不同的表单,只需将 "SELECT * FROM mission" 中的 "mission" 替换为要导出的表单名称即可。

测试结果:

存在一点问题,文件确实是 .xls格式,但是实际格式与文件格式不匹配,直白一点说就是,每一行内容都在同一个单元格里

第二次提问原文:

在Ubuntu中,用QtCreator里的QSqlQuery语句,将某路径下的A.db 数据库,里面的b表单内容导出为office可以打开的xls表格文件格式

GPT回复:

首先,需要安装sqlite3和libsqlite3-dev:

```
sudo apt-get update 
sudo apt-get install sqlite3 
sudo apt-get install libsqlite3-dev
```

其次,在Qt Creator中添加SQLite支持。打开Qt Creator中的“帮助”->“关于插件”,选择“SQLite”并激活。

然后,在Qt Creator中创建一个新的Qt控制台应用程序项目,并在项目配置中添加如下编译选项:

```
CONFIG += qt sql
```

在代码中,使用QSqlDatabase、QSqlQuery和QSqlRecord类,连接到SQLite数据库,执行SELECT查询语句,将数据存储到QVariantList中,并使用QAxObject类将数据写入到XLS文件中。

下面是示例代码:

```
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QVariantList>
#include <QAxObject>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("path/to/A.db");
    if (!db.open()) {
        qDebug() << "Database error:" << db.lastError().text();
        return 1;
    }
    QSqlQuery query;
    QString sql = "SELECT * FROM b";
    if (!query.exec(sql)) {
        qDebug() << "SQL error:" << query.lastError().text();
        return 1;
    }
    QSqlRecord record = query.record();
    int colCount = record.count();
    QVariantList headers;
    for (int i = 0; i < colCount; i++) {
        headers.append(record.fieldName(i));
    }
    QVariantList rows;
    while (query.next()) {
        QVariantList row;
        for (int i = 0; i < colCount; i++) {
            row.append(query.value(i));
        }
        rows.append(row);
    }
    QAxObject *excel = new QAxObject("Excel.Application");
    excel->setProperty("Visible", false);
    QAxObject *workbooks = excel->querySubObject("Workbooks");
    QAxObject *workbook = workbooks->querySubObject("Add");
    QAxObject *sheets = workbook->querySubObject("Sheets");
    QAxObject *sheet = sheets->querySubObject("Item(int)", 1);
    QAxObject *range = sheet->querySubObject("Range(QString)", "A1");
    range->setProperty("Value", QVariant(headers));
    range = range->querySubObject("Offset(int,int)", 1, 0);
    range->setProperty("Value", QVariant(rows));
    workbook->dynamicCall("SaveAs(QString)", "path/to/output.xls");
    workbook->dynamicCall("Close()");
    excel->dynamicCall("Quit()");
    delete excel;
    return 0;
}
```

最后,编译并运行程序,即可将数据库表b中的内容导出为Office可以打开的XLS表格文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值