文件管理 · 2022年9月7日

qt数据写入excel文件|如何通过Qt 创建一个excel文件

① 如何将qt中的数据导出到excel中

通过columnCount和rowCount获取到当前tablewidget的行数和列数,通过两个for循环,用QTableWidgetItem*item(introw,intcolumn)const成员函数遍历所有的单元格,再用获取到的QTableWidgetItem对象的virtualQVariantdata(introle)const成员函数取得单元格内数据,再调用QVariant的toString函数取得单元格内数据的字符串格式,然后你就可以将数据写入文件了。

② 如何用Qt读写excel的数据

QAxWidget excel("Excel.Application");1) 显示当前窗口:excel.setProperty("Visible", true);2) 更改 Excel 标题栏:excel.setProperty("Caption", "Invoke Microsoft Excel");3) 添加新工作簿:QAxObject * workbooks = excel.querySubObject("WorkBooks");workbooks->dynamicCall("Add");4) 打开已存在的工作簿:workbooks->dynamicCall("Open (const QString&)", QString("c:/test.xls"));5) 获取活动工作簿:QAxObject * workbook = excel.querySubObject("ActiveWorkBook");6) 获取所有的工作表:QAxObject * worksheets = workbook->querySubObject("WorkSheets");7) 获取工作表数量:int intCount = worksheets->property("Count").toInt();8) 获取第一个工作表:QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1);9) 获取cell的值:QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );

③ 如何使用Qt来操作Excel

Qt操作Excel,无论后缀是xls还是xlsx都可以。

1.如下,是下载的一个Excel VBA参考手册,内容不算太全!

④ 怎样用QT导入导出excel 求代码

我的QT版本是5.3//下面是代码void MainWindow:lot2Excel(QString title, QString tablename){QAxObject *excel = new QAxObject;QVector< QString> SubTitle;SubTitle.fill("", 2);SubTitle[0] = tr("时间");SubTitle[1] = tr("温度");if (excel->setControl("Excel.Application")) //连接Excel控件{excel->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合workbooks->dynamicCall("Add");//新建一个工作簿QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);int Column_Cnt = FBGcfg.History.self_FBGHistory2D.size() * SubTitle.size();//标题行QAxObject *title1=worksheet->querySubObject("Cells(int,int)", 1, 1);title1->dynamicCall("SetValue(const QString&)", title);title1->querySubObject("Font")->setProperty("Size", 18);//合并标题行QString cellTitle;cellTitle.append("A1:");cellTitle.append(QChar(Column_Cnt – 1 + 'A'));cellTitle.append(QString::number(1));QAxObject *range1 = worksheet->querySubObject("Range(const QString&)", cellTitle);range1->setProperty("WrapText", true); /* 文本自动换行 */range1->setProperty("MergeCells", true); /* 合并单元格 */range1->setProperty("HorizontalAlignment", -4108); //xlCenterrange1->setProperty("VerticalAlignment", -4108); //xlCenter/* 第二行标题 */for(int i=0; i<FBGcfg.History.self_FBGHistory2D.size(); i++){int subID = 0;for(subID = 0; subID < FBGcfg.self_FBGCnt; subID ++){if(FBGcfg.self_FBGID[subID] == FBGcfg.History.self_FBGHistory2D[i])break;}if(subID == FBGcfg.self_FBGCnt) /* 查询历史表格出错 */return;QAxObject *title2 = worksheet->querySubObject("Cells(int,int)", 2, i*2 + 1);title2->dynamicCall("SetValue(const QString&)", FBGcfg.self_FBGNAME[subID] + QString::number(FBGcfg.History.self_FBGHistory2D[i]));title2->querySubObject("Font")->setProperty("Size", 14);title2->querySubObject("Interior")->setProperty("Color",QColor(141, 182, 205));}/* 第二行标题合并单元格 */for(int i = 0; i < Column_Cnt; i+=2){QString cellTitle2;cellTitle2.append(QChar(i + 'A')).append("2:").append(QChar(i + 1 + 'A')).append("2");QAxObject *range2 = worksheet->querySubObject("Range(const QString&)", cellTitle2);range2->setProperty("WrapText", true); /* 文本自动换行 */range2->setProperty("MergeCells", true); /* 合并单元格 */}/* 第三行标题 */for(int i = 0; i < Column_Cnt; i++){QAxObject *colwidth;QAxObject *title3 = worksheet->querySubObject("Cells(int,int)", 3, i+1);QString lie;lie = lie.append(QChar(i + 'A')).append(":").append(QChar(i + 'A'));colwidth = worksheet->querySubObject("Columns(const QString&)", lie);if(i%2){colwidth->setProperty("ColumnWidth", 11);title3->dynamicCall("SetValue(const QString&)", SubTitle[1]);}else{colwidth->setProperty("ColumnWidth", 22);title3->dynamicCall("SetValue(const QString&)", SubTitle[0]);}title3->querySubObject("Font")->setProperty("Size", 12);title3->querySubObject("Interior")->setProperty("Color",QColor(191, 191, 191));}//调整行高 第一行30 第二行25 第三行20worksheet->querySubObject("Range(const QString&)", "1:1")->setProperty("RowHeight", 30);worksheet->querySubObject("Range(const QString&)", "2:2")->setProperty("RowHeight", 25);worksheet->querySubObject("Range(const QString&)", "3:3")->setProperty("RowHeight", 20);/* 数据区 */int MaxSize = 0;QAxObject *CellDataTime = NULL;QAxObject *CellDataTmp = NULL;for(int i = 0; i < History_BackUp.size(); i++){if(History_BackUp[i][0].size() > MaxSize)MaxSize = History_BackUp[i][0].size();for(int j = 0; j < History_BackUp[i][0].size(); j ++){QString timeStr = QDateTime::fromMSecsSinceEpoch(History_BackUp[i][0][j] * 1000.0).toString("yyyy-MM-dd hh:mm:ss");CellDataTime = worksheet->querySubObject("Cells(int,int)", j + 4, i*2 + 1);if(CellDataTime)CellDataTime->dynamicCall("SetValue(const QVariant&)",timeStr);CellDataTmp = worksheet->querySubObject("Cells(int,int)", j + 4, i*2 + 2);if(CellDataTmp)CellDataTmp->dynamicCall("SetValue(const QVariant&)",QString::number(History_BackUp[i][1][j], 'f', 2));}}//画框线QString lrange;lrange.append("A2:");lrange.append(Column_Cnt – 1 + 'A').append(QString::number(MaxSize + 3));QAxObject *rangeline = worksheet->querySubObject("Range(const QString&)", lrange);rangeline->querySubObject("Borders")->setProperty("LineStyle", QString::number(1));rangeline->querySubObject("Borders")->setProperty("Color", QColor(0, 0, 0));rangeline->setProperty("HorizontalAlignment", -4108); //xlCenterrangeline->setProperty("VerticalAlignment", -4108); //xlCenter//保存当前目录为我的文档目录,所以要用全路径workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(tablename));workbook->dynamicCall("Close()");//关闭工作簿excel->dynamicCall("Quit()");//关闭exceldelete excel;excel=NULL;}}//上面是代码,希望对你有帮助

⑤ qt中怎样将表格中数据导出为excel文件

如果你在做一个报表类的程序,可能将内容导出为文件是一项必须的功能。之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件。在使用了QtSql模块后,我很容易的将这个类改写应用在Qt程序中。类的名字叫“ExportExcelObject”。使用起来很简单:[cpp] view plain// 1. declare an object // – fileName Excel 文件路径 // – sheetName Excel 工作表(sheet)名称 // – tableView 需要导出的QTableView指针 ExportExcelObject obj(fileName, sheetName, tableView); // 2. define fields (columns) to the Excel sheet file // – 第1个参数是QTableView的列 // – 第2个参数是对应该列的Excel sheet中的列名 // – 第3个参数是该列的类型,可以使用char(x) (x最大255),int,datetime, 等 obj.addField(1, tr("name"), "char(60)"); obj.addField(2, tr("ID"), "int"); obj.addField(3, tr("time"), " datetime "); // 3. 该类有特定的SIGNAL用于连接一个progress控件,可以显示导出进度 connect(&obj, SIGNAL(exportedRowCount(int)), progressBar, SLOT(setValue(int))); // 4. do the work int retVal = obj.export2Excel(); if(retVal > 0) {//done } else {//something wrong } 那么这个类是怎样实现的呢?1. 将Excel文件当成是一个数据库使用MS的ODBC或ADO都可以将Excel文件当做一个数据库,那么我们只需要使用下面这个DSN连接串去创建并连接至该Excel文件:[cpp] view plainQString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN=''; FIRSTROWHASNAMES=1;;CREATE_DB=/"%1/";DBQ=%2"). arg(excelFilePath).arg(excelFilePath); 2. 将Excel的工作表(sheet)当成是一个数据库表可以使用SQL语句“CREATE TABLE” 去创建一个工作表。 3. 向表中插入数据使用SQL的“INSERT”语句插入数据。 4. Unicode支持是的,列名和数据都支持Unicode。

⑥ 怎么用Qt读写excel的数据

QAxWidget excel("Excel.Application"); 1) 显示当前窗口: excel.setProperty("Visible", true); 2) 更改 Excel 标题栏: excel.setProperty("Caption", "Invoke Microsoft Excel");

⑦ 如何通过Qt 创建一个excel文件

首先,我们打开前文所设置的工程项目。然后,我们在界面设计窗口,加入一个用于显示,要保存的目录。注意设置下相应的界面布局。然后,我们在mainwindow.h类中创建一个newExcel的函数,用于实现新建excel的功能。在对应的cpp文件中,我们要实现newExcel函数功能,首先,按前文的步骤,将application,workbook,worksheet进行赋值并设置。 其中,pApplication->setControl("Excel.Application");用于连接excel控件。pWorkBooks = pApplication->querySubObject("Workbooks");获取workbooks指针。之后,我们需要用QFile先判断下是否已经存在同名文件,如果没有,我们通过操作excel组件进行创建。file.exist()是判断文件是否存在。如果不存在,我们新建一个excel,然后获取活动的workbook。然后通过dynamicCall调用SaveAs函数进行保存。然后在构造函数中调用newExcel,我们可以创建一个名字为fileName的excel文件了。程序运行以后,会弹出保存文件的对话框,在其中选择要保存的excel文件名,点击保存之后,会在你选择的路径中创建一个excel文件。但是,当我们准备删除此文件的时候,会无法完成,这是因为,我们程序中使用pApplication操作excel的函数并没有关闭。9我们可以在源文件中添加以下代码关闭调用。这样就可以删除了。

⑧ 关于qt与excel

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");if(!db.isValid()){qDebug() << "export2Excel failed: QODBC not supported.";return ;}QString xlsFile = "D:/test.xls";QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};Readonly=0;DriverId=790;DBQ=%1").arg(xlsFile);db.setDatabaseName(dsn);if(!db.open()){//错误处理return;}QString queryystr = "select * from [sheet1$]";SqlTableModel*excelTableModel = new SqlTableModel(this, db);QString tableName = "[sheet1$]";excelTableModel->setTable(tableName);QSqlQuery querry(queryystr, db);excelTableModel->setQuery(querry);excelTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);excelTableModel->setSort(0, Qt::AscendingOrder);bool ok = excelTableModel->select(); //选取整个表的所有行ui.tableView_2->setModel(excelTableModel);int i = 0;foreach(QString heardName, heardList){excelTableModel->setHeaderData(i, Qt::Horizontal, heardName);i++;}int sqlTableCount = m_sqlTableModel->rowCount();int excelTableCount = excelTableModel->rowCount();QList<QSqlRecord> tmprecord;for (int row = 0; row < excelTableCount; row++ ){QSqlRecord excelRecord = excelTableModel->record(row);tmprecord << excelRecord;}db.close();bool open = m_dba.open();foreach(QSqlRecord record, tmprecord){bool ok = m_sqlTableModel->insertRow(sqlTableCount); //添加一行for (int k = 0; k<5;k++){if (k == 0){bool suc= m_sqlTableModel->setData(m_sqlTableModel->index(sqlTableCount,k),record.value(k), Qt::CheckStateRole);}bool suc= m_sqlTableModel->setData(m_sqlTableModel->index(sqlTableCount,k),record.value(k), Qt::EditRole);}sqlTableCount++;}AlterButtonClicked();initWindow(TEACHERMANAGECLICKED);AlterButtonClicked(){m_sqlTableModel->database().transaction(); //开始事务操作 if (m_sqlTableModel->submitAll()) { m_sqlTableModel->database().commit(); //提交 } else { m_sqlTableModel->database().rollback(); //回滚 QMessageBox::warning(this, tr("Model"), tr("数据库错误: %1").arg(m_sqlTableModel->lastError().text())); } }initWindow(int index){int i = 0;heardList.clear();if (index == STUDENTMANAGECLICKED){heardList << "选择" << "编号" << "姓名" << "性别" << "班级" << "备注";m_sqlTableModel->setTable("\"StudentInfo\"");m_sqlTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);m_sqlTableModel->setSort(0, Qt::AscendingOrder);m_sqlTableModel->select(); //选取整个表的所有行ui.tableView_2->setModel(m_sqlTableModel);foreach(QString heardName, heardList){m_sqlTableModel->setHeaderData(i, Qt::Horizontal, heardName);i++;} }else if (index == TEACHERMANAGECLICKED){heardList << "选择" << "用户名" << "姓名" << "性别" << "角色" << "备注";m_sqlTableModel->setTable("\"TeacherInfo\"");m_sqlTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);m_sqlTableModel->setSort(0, Qt::AscendingOrder);bool ok1 = m_sqlTableModel->select(); //选取整个表的所有行ui.tableView_2->setModel(m_sqlTableModel);foreach(QString heardName, heardList){m_sqlTableModel->setHeaderData(i, Qt::Horizontal, heardName);i++;}}//m_sqlTableModel->insertColumn(0);ui.tableView_2->resizeColumnsToContents();}

⑨ Qt操作Excel

如果设置后台启动报错的话,那提供一种无奈之选,就是,设置窗口可见,然后

excel->setProperty("WindowState","xlMinimized");

将窗口最小化,将就一下

⑩ 用qt读写excel文件一定要安装excel么

方法/步骤首先,我们要创建一个项目并进行初步的项目设置,过程参见本系列文章的第一篇。这里就不再多说了,我们将项目文件从qtcreator中打开。为了显示读取到的数据,我们先在界面文件中添加一个Label,如果读取了数据可以在这里显示一下进行验证。然后,打开mainwindow.cpp文件,在其中引入适当的头文件,具体如图中所示。接着,我们在头文件中打开置顶的excel文件,并对其中的对象类进行配置,因为前文已经介绍过,就不详细说了,具体代码如下: QAxObject excel("Excel.Application"); excel.setProperty("Visible",false); QAxObject *workbooks = excel.querySubObject("WorkBooks"); workbooks->dynamicCall("Open (const QString&)",QString("c:/a.xls")); QAxObject *workbook = excel.querySubObject("ActiveWorkBook");//获取活动工作簿 QAxObject *worksheets = workbook->querySubObject("WorkSheets");//获取所有的工作表,如图然后,我们开始获取第一工作表。通过range查询对应的cell,然后获取cell中value值。代码如下: QAxObject *range = worksheet->querySubObject("Cells(int,int)",1,1); //获取cell的值 QString strVal = range->dynamicCall("Value2()").toString();接着,我们将得到的strVal显示label上用于验证是否成功读取。我们再在c盘下新建一个a.xls文件,并且在第一个单元格输入一个字符串,如图所示.之后,我们用程序运行下,查看程序是否达到预期的效果.可以看到程序运行成功了.