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; }
//
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构