c语言sscanf函数的用法是什么
194
2024-01-26
四、导出EXCEL表最后,就是导出excel了,创建一个新的类odbcexcel.h文件复制#ifndef ODBCEXCEL_H#define ODBCEXCEL_H#include#include#
include#include#include#includeclassOdbcExcel {public: OdbcExcel(); //将数据保存为excelboolstaticsave
(QString filePath,QStringList headers,QList data,QString comment=""); //将QTableView保存为excelboolstatic
saveFromTable(QString filePath,QTableView *tableView,QString comment=""); //获取错误信息QString staticgetError
(){return error;} private: voidstaticprintError( QSqlError error); boolstaticinsert(QSqlQuery& query, QString sheetName, QStringList slist)
; static QString error; }; #endif// ODBCEXCEL_Hodbcexcel.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 connectionif( !db.open()) {
error="无法打开数据库"; return false; //! db error } QSqlQuery query(db); QString sql;
// drop the table if its 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
,sheetName,slist); } db.close(); return true; } bool OdbcExcel::saveFromTable(QString filePath,QTableView *tableView, QString comment) { QAbstractI
temModel* 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
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
OdbcExcel::save(filePath,headers,data,comment); } void OdbcExcel::printError(QSqlError error) { QString sqlerr =
error.text(); error=sqlerr; qCritical()
"INSERT INTO [%1] VALUES(").arg( sheetName); for(int i=0,n=slist.size();i
":%1").arg(i); if(i!=n-1) sSql+=","; else sSql+=")"; }
query.prepare( sSql); for(int i=0,n=slist.size();i
).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() { QFi
leDialog 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操作数据库就到这了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~