QT之ODBC操作Excel的解决方案
来源:互联网 发布:杭州网店美工培训 编辑:程序博客网 时间:2024/05/16 06:21
公司的一个测试程序,需要导出一些数据到Excel中。最初想到的是利用AxObject来实现,但好像对于我来说并没有找到什么好的解决方案,于是换成了ODBC操作Excel的方案。这是有原因的,因为当初QT使用SQL Server数据库的时候,我选择的就是利用ODBC实现的,相对来说比较熟悉。
QT的版本为:QT 5.3.1
开发环境:windows7 64位
第一步、使用到ODBC自然要添加sql库了。在.pro文件中添加:
QT += sql
第二步、增加相应的头文件
#include <QFileDialog>#include <QSqlDatabase>#include <QSqlQuery>#include <QDate>#include <QSqlError>
第三步、实现代码:
//导出文件void FrameMain::on_btn_exportAddr_clicked(){ QString filename = QFileDialog::getSaveFileName(this, tr("Save Excel"), "MacAddr", tr("*.xls;; *.xlsx")); //选择路径 if(filename.isEmpty()){ return; }else{ qDebug() << "filename:" << filename; QString sheetName = "Sheet1"; QSqlDatabase db = QSqlDatabase::addDatabase("QODBC","excelexport"); if( !db.isValid()) return; //! type error QString dsn = "DRIVER={Microsoft Excel Driver (*.xls)};" "DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="; dsn += ("\"" + filename + ".xls\"" + ";DBQ=" + filename + ".xls"); qDebug() << "dsb:" << dsn; db.setDatabaseName( dsn); // open connection if( !db.open()) return; //! db error QSqlQuery query(db); QString sSql; bool state; // drop the table if it's already exists sSql = QString("DROP TABLE [%1]").arg(sheetName); query.exec( sSql); //create the table (sheet in Excel file) sSql = QString("CREATE TABLE [%1] (").arg(sheetName); sSql += "[ADDR] char(20), [DAY] char(50)"; sSql += ")"; state = query.prepare( sSql); if( !query.exec()) { printError( query.lastError()); goto CLOSE; //! create failed } for (int i = 0; i < excelSave->length(); i ++){ sSql = QString("INSERT INTO [%1] ").arg( sheetName); sSql += "(ADDR, DAY) VALUES(:addr,:day)"; state = query.prepare( sSql); qDebug() << excelSave->at(i)->addr << " " << excelSave->at(i)->data; query.bindValue(":addr", excelSave->at(i)->addr); query.bindValue(":day", excelSave->at(i)->data); if( !query.exec()) { printError( query.lastError()); goto CLOSE; //! insert failed } } //close connectionCLOSE: db.close(); }}现在来看一下上面这个代码,很明显,这是一个槽函数,响应一个按钮的槽函数。首先,调用QFileDialog,得到需要保存Excel文件的路径和文件名,保存在filename当中。然后,再定义一些ODBC需要使用的变量,比如sheetName和dsn,sheetName是Excel界面的分页项,而dsn这是非常重要的,中文翻译过来就是数据源名称。
DSN为ODBC定义了一个确定的数据库和必须用到的ODBC驱动程序。每个ODBC驱动程序定义为该驱动程序支持的一个数据库创建DSN需要的信息。就是说安装ODBC驱动程序以及创建一个数据库之后,必须创建一个DSN。
最后,就是完成操作数据库相似的操作了,同样用到SQL语句。先创建了表格,然后再往表格上插入数据,具体步骤可以参考代码。
下图是跳出的FileDialog:
下图是保存之后的Excel:
2 0
- QT之ODBC操作Excel的解决方案
- 关于Qt COM和ODBC操作Excel速度的比较
- Qt之操作Excel
- Qt之操作Excel
- Qt之操作Excel
- Qt之操作Excel
- Qt之操作Excel
- Qt之操作Excel
- qt 之操作 excel
- Qt之操作Excel
- odbc 读写 操作 Excel
- ODBC操作Excel
- ODBC操作Excel
- Qt之操作Excel(QtXlsxWriter)
- Qt之操作Excel(2)
- Qt之操作Excel(QtXlsxWriter)
- qt用ODBC连接excel
- 找不到 Microsoft Excel Driver ODBC 驱动程序的安装例程 解决方案
- Instant Run 浅析
- GoogLeNet
- C语言函数 把单个的大写字母转换为小写字母
- Kafka深度解析
- iOS SVProgressHUD延迟提示显示时间的方法
- QT之ODBC操作Excel的解决方案
- 光标位置插入内容
- Warning[w6]
- Xcode encountered a problem. Source editor functionality is limited. Attempting to restore...
- CUDA error
- C语言中输入包含空格字符串的两种方法
- InnoDB体系结构
- Android PopupWindow简单使用
- PHP 运行方式(PHP SAPI介绍)