四、导出EXCEL表
最后,就是导出excel了,创建一个新的类
odbcexcel.h文件
#ifndef ODBCEXCEL_H
#define ODBCEXCEL_H
#include
#include
#include
#include
#include
#include
class OdbcExcel
{
public:
OdbcExcel();
//将数据保存为excel
bool static save(QString filePath,QStringList headers,QList data,QString comment="") ;
//将QTableView保存为excel
bool static saveFromTable(QString filePath,QTableView *tableView,QString comment="");
//获取错误信息
QString static getError(){return error;}
private:
void static printError( QSqlError error);
bool static insert(QSqlQuery& query, QString sheetName, QStringList slist);
static QString error;
};
#endif // ODBCEXCEL_H
odbcexcel.c
#include "odbcexcel.h"
#include "odbcexcel.h"
#include
OdbcExcel::OdbcExcel()
{
}
QString OdbcExcel::error;
bool OdbcExcel::save(QString filePath, QStringList headers, QList data,QString comment)
{
QString sheetName = "Sheet1";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC","excelexport");
if( !db.isValid())
{
error="数据库驱动异常";
return false; //! type error
}
QString dsn = "DRIVER={Microsoft Excel Driver (*.xls)};"
"DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\""+filePath+"\\";DBQ="+filePath;
db.setDatabaseName( dsn);
// open connection
if( !db.open())
{
error="无法打开数据库";
return false; //! db error
}
QSqlQuery query(db);
QString sql;
// drop the table if it's already exists
sql = QString("DROP TABLE [%1]").arg(sheetName);
query.exec( sql);
//create the table (sheet in Excel file)
sql = QString("CREATE TABLE [%1] (").arg(sheetName);
foreach (QString name, headers) {
sql +=QString("[%1] varchar(200)").arg(name);
if(name!=headers.last())
sql +=",";
}
sql += ")";
query.prepare( sql);
if( !query.exec()) {
OdbcExcel::printError( query.lastError());
db.close();
return false;
}
foreach (QStringList slist, data) {
insert(query,sheetName,slist);
}
if(!comment.isEmpty())
{
QStringList slist;
slist<for(int i=0,n=headers.size()-1;i<n;i++)
{
slist<<"";
}
insert(query,sheetName,slist);
}
db.close();
return true;
}
bool OdbcExcel::saveFromTable(QString filePath,QTableView *tableView, QString comment)
{
QAbstractItemModel* model=tableView->model();
const int column=model->columnCount();
const int row=model->rowCount();
//header
QStringList headers;
for(int i=0;i//隐藏列
if(tableView->isColumnHidden(i))
continue;
headers<headerData(i,Qt::Horizontal).toString();
}
//data
QStringList list;
QList data;
for(int i=0;iif(model->index(i,0).data().isNull())
continue;
list.clear();
for(int j=0;j//隐藏列
if(tableView->isColumnHidden(j))
continue;
list<index(i,j).data().toString();
}
data<<list;
}
return OdbcExcel::save(filePath,headers,data,comment);
}
void OdbcExcel::printError(QSqlError error)
{
QString sqlerr = error.text();
error=sqlerr;
qCritical()<query, QString sheetName, QStringList slist)
{
QString sSql = QString("INSERT INTO [%1] VALUES(").arg( sheetName);
for(int i=0,n=slist.size();i<n;i++)
{
sSql+=QString(":%1").arg(i);
if(i!=n-1)
sSql+=",";
else
sSql+=")";
}
query.prepare( sSql);
for(int i=0,n=slist.size();i<n;i++)
{
query.bindValue(QString(":%1").arg(i),slist.at(i));
}
if( !query.exec()) {
printError( query.lastError());
return false;
}
return true;
}
然后在UI界面中创建一个导出按键,并在按键按下时调用数据库导出类来完成导出excel功能
//导出
void sqlite_sqlquerymodel_edit::on_pushButton_export_clicked()
{
QFileDialog dlg;
dlg.setAcceptMode(QFileDialog::AcceptSave);
// Qt 5
dlg.setDirectory(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
// Qt 4
// dlg.setDirectory(QDesktopServices::storageLocation(QDesktopServices::DesktopLocation));
dlg.setNameFilter("*.xls");
dlg.selectFile(QDate::currentDate().toString("yyyy-MM-dd.xls"));
if(dlg.exec()!= QDialog::Accepted)
return;
QString filePath=dlg.selectedFiles()[0];
if(OdbcExcel::saveFromTable(filePath,ui->tableView,"注释:无")) {
QMessageBox::information(this,tr("提示"),tr("保存成功"));
}
else{
QString msg="保存失败!\\n\\r"+OdbcExcel::getError();
QMessageBox::critical(this,tr("错误"),tr(msg.toUtf8()));
}
}
点击导出后,弹出保存文件框保存文件
保存成功
然后打开excel查看保存的数据跟Qt上的一致
OK,Qt操作数据库就到这了。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
API
+关注
关注
2文章
1523浏览量
62516 -
SQL
+关注
关注
1文章
775浏览量
44313 -
数据库
+关注
关注
7文章
3857浏览量
64808 -
SQlite
+关注
关注
0文章
80浏览量
16048
发布评论请先 登录
相关推荐
数据库系统是什么?数据库系统概念之数据库设计资料免费下载
什么是概念结构设计1.将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计2.概念结构是各种数据模型的共同基础,它比
发表于 09-07 14:34
•1次下载
![<b class='flag-5'>数据库</b>系统是什么?<b class='flag-5'>数据库</b>系统概念<b class='flag-5'>之</b><b class='flag-5'>数据库</b>设计资料免费下载](https://file.elecfans.com/web1/M00/63/2B/o4YBAFuSHbeAM4RcAACEYh_R_B4674.png)
如何使用PowerDesigner进行数据库静态结构设计?详细资料概述
把用户需求抽象为概念模型即为概念结构设计。
概念模型除了要求能反映客观世界并且易于理解外,还要求其易于向数据模型(如关系模型)转化。
概念模型独立于具体的数据库系统,是整个数据库设
发表于 09-13 17:05
•0次下载
![如何使用PowerDesigner进行<b class='flag-5'>数据库</b>静态<b class='flag-5'>结构设计</b>?详细资料概述](https://file.elecfans.com/web1/M00/63/F2/o4YBAFuaKoaAXBsrAAF31hRLKdQ387.png)
数据库教程之如何进行数据库设计
本文档的主要内容详细介绍的是数据库教程之如何进行数据库设计内容包括了:1 数据库设计概述 ,2 数据库需求分析 ,3 数据库
发表于 10-19 10:41
•21次下载
![<b class='flag-5'>数据库</b>教程之如何进行<b class='flag-5'>数据库</b>设计](https://file.elecfans.com/web1/M00/68/C6/pIYBAFvJSIKASWEIAACwgX_ZZeE760.png)
数据库设计的七大知识点总结详细资料免费下载
本文档的主要内容详细介绍的是数据库设计的七大知识点总结包括了:1 数据库设计概述2 需求分析3 概念结构设计4 逻辑结构设计5 数据库的物理
发表于 10-19 10:41
•0次下载
![<b class='flag-5'>数据库</b>设计的七大知识点总结详细资料免费下载](https://file.elecfans.com/web1/M00/68/AF/o4YBAFvJSraAY5LKAAElll_zQAQ598.png)
数据库学习入门资料之如何进行数据库设计
本文档的主要内容详细介绍的是数据库学习入门资料之如何进行数据库设计主要内容包括了:数据库系统设计的1 概述2 需求分析3 概念设计4 逻辑设
发表于 10-25 16:29
•14次下载
![<b class='flag-5'>数据库</b><b class='flag-5'>学习</b>入门资料<b class='flag-5'>之</b>如何进行<b class='flag-5'>数据库</b>设计](https://file.elecfans.com/web1/M00/69/11/o4YBAFvRgLKAFMKHAAAhnoW_1Ms060.png)
数据库学习入门资料之数据库的概念结构详细资料概述
什么是概念结构设计
将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计
概念结构是各种数据模型的共同基础,它比
发表于 10-25 16:29
•0次下载
![<b class='flag-5'>数据库</b><b class='flag-5'>学习</b>入门资料<b class='flag-5'>之</b><b class='flag-5'>数据库</b>的概念<b class='flag-5'>结构</b>详细资料概述](https://file.elecfans.com/web1/M00/69/2C/pIYBAFvRhBWACVm0AAB4a7P1L3E013.png)
数据库概念结构是如何设计的概念结构设计资料概述
本文档的主要内容详细介绍的是数据库概念结构是如何设计的概念结构设计资料概述主要内容包括了:1 概念结构2 概念结构设计的方法与步骤3
发表于 10-26 11:49
•22次下载
![<b class='flag-5'>数据库</b>概念<b class='flag-5'>结构</b>是如何设计的概念<b class='flag-5'>结构设计</b>资料概述](https://file.elecfans.com/web1/M00/69/37/pIYBAFvSshOADBADAACF2aJJrfw747.png)
数据库的设计概念总结
本文档的主要内容详细介绍的是数据库的设计概念总结主要内容包括了:1.数据库设计概述,2.需求分析,3.概念结构设计,4.逻辑结构设计,5.数据库
发表于 01-09 17:29
•13次下载
![<b class='flag-5'>数据库</b>的设计概念总结](https://file.elecfans.com/web1/M00/81/A3/o4YBAFw1v1yAMmUZAAD6z3tK1rA443.png)
数据库设计开发案例教程之数据库设计的资料介绍
本文档的主要内容详细介绍的是数据库设计开发案例教程之数据库设计的资料介绍主要内容包括了:1 数据库设计概述,2 需求分析,3 概念结构设计,4 逻辑
发表于 01-11 11:20
•17次下载
![<b class='flag-5'>数据库</b>设计开发案例教程之<b class='flag-5'>数据库</b>设计的资料介绍](https://file.elecfans.com/web1/M00/82/39/pIYBAFw4EO-AT-8JAAEaift3s7Y453.png)
Qt学习笔记之数据库结构设计1
数据库也是应用程序的重要部分,一个完整的应用程序几乎都包含数据库。
当前主流的数据库有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。
Sqlite是一款轻型的
![<b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>1](https://file.elecfans.com/web2/M00/92/61/pYYBAGPu8w2AOEaUAACvV5wuQkE577.jpg)
Qt学习笔记之数据库结构设计2
数据库也是应用程序的重要部分,一个完整的应用程序几乎都包含数据库。
当前主流的数据库有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。
Sqlite是一款轻型的
![<b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>2](https://file.elecfans.com/web2/M00/91/DE/poYBAGPu8w6AQpYHAAAFxq95C4E520.jpg)
评论