文章目录

  • 一. xls/xlsx文件数据导入TableWidget表格
  • 二. tableWidget表格数据导出为xls/xlsx文件

QT里面自带的TableWidget控件可以实现表格显示的功能,刚开始学习TableWidget,只是自己提前创建好表格,规定好数据,但真正的软件不会让我们规定好数据格式。下面我们一起来看一下,如何导入xls文件,自动生成表格。


我所使用的这种方法,导入/导出相对较慢,网上有另一种比较快,有机会再写出来。

前期准备:

pro文件加入
QT += axcontainer

在头文件加入#include<ActiveQt/QAxObject>

网上还有写#include

版本不同,可能代码写法不同,自己测试。

一. xls/xlsx文件数据导入TableWidget表格


我们右击导入按钮,转到槽,添加被点击后的代码

QString strData;
void MainWindow::on_pushButton_17_clicked()
{//首先我们需要创建一个文件选择对话框QString curPash =QDir::currentPath(); //获取当前路径QString dlgTitle="选择表格文件";//xls和xlsx格式的文件都可以,xlsx兼容xls,注意每一种类型后面要加两个分号QString filter="表格文件(*.xls *.xlsx);;xls文件(*.xls);;xlsx文件(*.xlsx);;所有文件(*.*)";//创建文件选择对话框QStringList fileList = QFileDialog::getOpenFileNames(this,dlgTitle,curPash,filter);if(fileList.count()<1)return;for(int i = 0;i<fileList.count();i++){//保存文件地址strData = fileList.at(i);}//连接Excel控件QAxObject excel("Excel.Application");//不显示任何警告信息excel.setProperty("Visible",false);//获取工作簿集合QAxObject *workbooks = excel.querySubObject("WorkBooks");workbooks->dynamicCall("Open (const QString&)",str);//获取活动工作簿QAxObject *workbook = excel.querySubObject("ActiveWorkBook");//获取工作表集合的工作表1,即sheet1QAxObject *worksheet = workbook->querySubObject("Sheets(int)",1);QAxObject *range; //获取cell的值QString strVal="hull";QStringList header;//设置初始表格行列都为0ui->tableWidget->setRowCount(0); //设置行数为0ui->tableWidget->setColumnCount(0); //设置列数为0int count =0;for(int i = 1;i<row;i++){//注意setRowCount里面的函数不是追加,而是总数,很多人最开始都把这个函数以为是总数,造成程序经常崩溃ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);for(int j = 1;j<column;j++){if(i == 1){ui->tableWidget->setColumnCount(ui->tableWidget->columnCount()+1);range = worksheet->querySubObject("Cells(int,int)",i,j); //获取cell的值strVal = range->dynamicCall("Value2()").toString();header<<strVal;//设置表格头}else{probar->setValue(++count);range = worksheet->querySubObject("Cells(int,int)",i,j); //获取cell的值strVal = range->dynamicCall("Value2()").toString();ui->tableWidget->setItem(i-2,j-1,new QTableWidgetItem(strVal));}}if(i == 1){ui->tableWidget->setHorizontalHeaderLabels(header);}}ui->tableWidget->setRowCount(ui->tableWidget->rowCount()-1);}
}

代码中的工作表就是xls文件打开左下角的这个:


二. tableWidget表格数据导出为xls/xlsx文件


我们右击导入按钮,转到槽,添加被点击后的代码

void MainWindow::on_pushButton_23_clicked()
{//获取保存路径QString filepath=QFileDialog::getSaveFileName(this,tr("Save"),".",tr(" (*.xlsx)"));if(!filepath.isEmpty()){QAxObject *excel = new QAxObject(this);//连接Excel控件excel->setControl("Excel.Application");//不显示窗体excel->dynamicCall("SetVisible (bool Visible)","false");//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示excel->setProperty("DisplayAlerts", false);//获取工作簿集合QAxObject *workbooks = excel->querySubObject("WorkBooks");//新建一个工作簿workbooks->dynamicCall("Add");//获取当前工作簿QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取工作表集合QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合的工作表1,即sheet1QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//设置表头值for(int i=1;i<ui->tableWidget->columnCount()+1;i++){//设置设置某行某列QAxObject *Range = worksheet->querySubObject("Cells(int,int)", 1, i);Range->dynamicCall("SetValue(const QString &)",ui->tableWidget->horizontalHeaderItem(i-1)->text());}//设置表格数据for(int i = 1;i<ui->tableWidget->rowCount()+1;i++){for(int j = 1;j<ui->tableWidget->columnCount()+1;j++){QAxObject *Range = worksheet->querySubObject("Cells(int,int)", i+1, j);Range->dynamicCall("SetValue(const QString &)",ui->tableWidget->item(i-1,j-1)->data(Qt::DisplayRole).toString());}}workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepathworkbook->dynamicCall("Close()");//关闭工作簿excel->dynamicCall("Quit()");//关闭exceldelete excel;excel=NULL;qDebug() << "\n导出成功啦!!!";}
}

Qt Tablewidget表格数据的导出和导入相关推荐

  1. oracle导出字符集命令,Oracle数据的导出及导入实现

    最近由于项目原因,我学习了Oracle数据库一些知识.数据的导出及导入,是任何数据库使用人员必备的一项技能,现给大家介绍一下Oracle数据的导出及导入实现方法. 数据的导出及导入,可以用命令exp/ ...

  2. asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL

    代码: 1 /// <summary> 2 /// HTML Table表格数据(html)导出EXCEL 3 /// </summary> 4 /// <param n ...

  3. Oracle数据的导出与导入

    前序:关于Oracle9i数据的导出与导入问题,折腾我好长时间了,尤其是导入.今天在一位同事的指导下,算是终于成功了,为了记住这位同事的帮助,在此仅以"坤"作为记号. 正文: Or ...

  4. linux如何导出mysql数据,linux下mysql数据的导出和导入

    linux下mysql数据的导出和导入 2014年12月09号 发表于:评论 () 热度:1090 导出整个数据库中的所有数据 1.在linux命令行下输入: mysqldump -u userNam ...

  5. linux下的mysql怎么导入数据,linux下mysql数据的导出和导入

    linux下mysql数据的导出和导入 2014年12月09号 发表于:评论 () 热度:1149 导出整个数据库中的所有数据 1.在linux命令行下输入: mysqldump -u userNam ...

  6. Oracle对数据的导出和导入,建立用户,删除用户以及其下的所有表

    转自:http://blog.csdn.net/angus_17/article/details/7675302 1.对数据的导出: a.备份单张表 :exp  userid=scott/centre ...

  7. pl/sql oracle导出,用pl/sql实现oracle数据的导出和导入

    一.PL/SQL工具实现oracle数据导出 1. 数据对象导出 工具->导出用户对象,弹出如下界面: 选择用户,选择导出文件的路径,命名导出文件名称(.sql),然后点击导出即可. 注意:此方 ...

  8. SAP UI5 表格数据如何导出成 Excel 文件(Table Export As Excel)

    本教程前一步骤,我们在介绍 SAP UI5 SmartTable 时,提到了它的 Excel 导出功能.如果将 iseExportToExcel 设置为 true,就可以启用 Excel 导出功能,将 ...

  9. Oracle数据泵导出和导入数据

    1.建表空间,准备初始化脚本init.sql如下(两个路径均需要存在) /*创建表空间,空间名+地址,初始为100m,为表空间增加自动扩展能力*/ create tablespace DATA_YEA ...

最新文章

  1. 程序员在翻车时的30种常见反应
  2. 架构师之路 — API 经济 — API 实现方式
  3. 乞丐版HTML5播放器
  4. 0004-Median of Two Sorted Arrays(寻找两个正序数组的中位数)
  5. AOP(面向切面编程)大概了解一下
  6. 前端学习(2634):修改webstrom颜色
  7. 实战 | F1060防火墙透明模式典型组网配置案例(access)
  8. sharepoint 2013文档上传最大50M怎么改啊
  9. 数据中心那些常见的问题
  10. 这群程序员工作日竟然不用上班?
  11. 【路径规划】基于matlab GUI A_star算法最短路径规划【含Matlab源码 633期】
  12. 服务器显示屏出现白屏,远程服务器桌面 显示白屏
  13. 医疗行业用户容灾备份方案
  14. nginx的使用(6)—— 配置静态代理
  15. windows cmd命令行查看结束进程
  16. 【12】Kotlin函数泛型协程
  17. 在搜索框里添加放大镜的图标,且显示提示信息
  18. 做国外广告联盟赚美刀的5大类项目
  19. [LeetCode] 157. Read N Characters Given Read4
  20. 制作ipad iphone充电线

热门文章

  1. 京喜拼拼微信小程序-signStr参数加密
  2. MSSQL之一 数据库系统简介 与SQL Server 2008概述
  3. mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user 'zzq'@'localhost' (using password: YES)
  4. 对于成功至关重要:商界领袖们是怎样阅读的?
  5. 海康设备注册一直失败的问题
  6. maan's Eudemonia
  7. 常用的计算机有哪些台式的还有哪些,现在台式电脑的主流配置有哪些?
  8. 公司将软件测试外包已成普遍现象?
  9. Qt优秀开源项目之十二:shotcut
  10. Linux 系统编程 -进程概念篇