具体实现功能:
实现将某数据库内的某表格,导出为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 ;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)