qt 通过odbc连接excel的经验分享
// qt 通过odbc连接excel虽然少了一些东西,但是还是对于某些公司加密的系统,还是有点稳定的,至少比excel.application稳定
在创建表格之后向表格中写数据的时候,居然发现insert错误,尝试半天才发现,我表格有个字段可能是系统的关键字,于是乎我将其换了个名字就能用了此处我遇到的问题是 time 字段,能创建表格,但是不能插入
将 time 改为时间就没问题了
void MainWindow::saveToExcel(QString qStringExcelName) { //#include <QFileDialog> //#include <QSqlError> //#include <QSqlDatabase> //#include <QSqlQuery> //#include <QDateTime> //QT += sql QString qstringSql = ""; QString qStringExcelSheetName =ui->table_testing->item(0,2)->text()+"_"+ui->table_testing->item(0,3)->text();//Excel内sheet页的名字//QTime::currentTime().toString("hh:mm:ss")+"_"+ qStringExcelSheetName = qStringExcelSheetName.replace(" ",""); QSqlDatabase qsqldatabaseDB = QSqlDatabase::addDatabase("QODBC","excelexport");//连接到excel。使用QODBC的方式操作Excel,该方式同样可操作数据库 if( !qsqldatabaseDB.isValid()){ return;//type error } QString qstringDsn = "DRIVER={Microsoft Excel Driver (*.xls)};" "DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="; qstringDsn += ("\"" + qStringExcelName + "\"" + ";DBQ=" + qStringExcelName);//确定要操作的excel信息,可直接百度,有源码教程。 qsqldatabaseDB.setDatabaseName(qstringDsn); if( !qsqldatabaseDB.open()){// open connection return; //! db error } QSqlQuery qsqlqueryDB(qsqldatabaseDB);//查询命令 { QStringList qstringlistTables = qsqldatabaseDB.tables(); if(qstringlistTables.contains(qStringExcelSheetName)){ //qDebug()<<11; }else{ qstringSql = QString("CREATE TABLE [%1] (").arg(qStringExcelSheetName);//创建表 qstringSql += "[序号] varchar(200),[产品名称] varchar(200),[类别] varchar(200),[参数名称] varchar(200),[参数值] varchar(200), [最小值] varchar(200),[最大值] varchar(200),[单位] varchar(200),[数据类型] varchar(200),[读写权限] varchar(200),[时间] varchar(200)"; qstringSql += ")"; qsqlqueryDB.prepare( qstringSql); if( !qsqlqueryDB.exec()) { } } qstringSql = QString("INSERT INTO [%1] ").arg( qStringExcelSheetName);//insert a record qstringSql += "(序号,产品名称,类别,参数名称,参数值,最小值,最大值,单位,数据类型,读写权限,时间)VALUES(:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10,:p11)"; /*------------------------------------------------以下均为数据的导出----------------------------------------------------*/ table = ui->table_testing; int rowcount = table->rowCount(); for(int i=0;i<rowcount;i++){ qsqlqueryDB.prepare( qstringSql);//excel表头名称 qsqlqueryDB.bindValue(":p1",table->item(i,1)->text()); qsqlqueryDB.bindValue(":p2",table->item(i,2)->text()); qsqlqueryDB.bindValue(":p3",table->item(i,3)->text()); qsqlqueryDB.bindValue(":p4",table->item(i,4)->text()); qsqlqueryDB.bindValue(":p5",table->item(i,5)->text()); qsqlqueryDB.bindValue(":p6",table->item(i,8)->text()); qsqlqueryDB.bindValue(":p7",table->item(i,9)->text()); qsqlqueryDB.bindValue(":p8",table->item(i,11)->text()); qsqlqueryDB.bindValue(":p9",table->item(i,12)->text()); qsqlqueryDB.bindValue(":p10",table->item(i,13)->text()); qsqlqueryDB.bindValue(":p11",QTime::currentTime().toString("hh:mm:ss")); if( !qsqlqueryDB.exec()) { myDebug; } } } qsqldatabaseDB.close(); table = nullptr; }
//

浙公网安备 33010602011771号