【环球新视野】Qt Tablewidget表格数据的导出和导入
QT里面自带的TableWidget控件可以实现表格显示的功能,刚开始学习TableWidget,只是自己提前创建好表格,规定好数据,但真正的软件不会让我们规定好数据格式。下面我们一起来看一下,如何导入xls文件,自动生成表格。
(相关资料图)
我所使用的这种方法,导入/导出相对较慢,网上有另一种比较快,有机会再写出来。
前期准备:
pro文件加入 QT += axcontainer
在头文件加入#include
网上还有写#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;idynamicCall(\"Open (const QString&)\",str); //获取活动工作簿 QAxObject *workbook = excel.querySubObject(\"ActiveWorkBook\"); //获取工作表集合的工作表1,即sheet1 QAxObject *worksheet = workbook->querySubObject(\"Sheets(int)\",1); QAxObject *range; //获取cell的值 QString strVal=\"hull\"; QStringList header; //设置初始表格行列都为0 ui->tableWidget->setRowCount(0); //设置行数为0 ui->tableWidget->setColumnCount(0); //设置列数为0 int count =0; for(int i = 1;itableWidget->setRowCount(ui->tableWidget->rowCount()+1); for(int j = 1;jtableWidget->setColumnCount(ui->tableWidget->columnCount()+1); range = worksheet->querySubObject(\"Cells(int,int)\",i,j); //获取cell的值 strVal = range->dynamicCall(\"Value2()\").toString(); header<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,即sheet1 QAxObject *worksheet = worksheets->querySubObject(\"Item(int)\",1); //设置表头值 for(int i=1;itableWidget->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;itableWidget->rowCount()+1;i++) { for(int j = 1;jtableWidget->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));//保存至filepath workbook->dynamicCall(\"Close()\");//关闭工作簿 excel->dynamicCall(\"Quit()\");//关闭excel delete excel; excel=NULL; qDebug() << \"
导出成功啦!!!\"; }}
【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】
点击这里:
关键词:
相关阅读
-
【环球新视野】Qt Tablewidget表格数据...
QT里面自带的TableWidget控件可以实现表格显示的功能,刚开始学习Ta... -
连爆大冷,刘圣书/谭宁暴打世界第15迎双...
北京时间6月1日,2023泰国羽毛球公开赛super500继续进行。1 4决赛... -
【原】男子晒媳妇“糊弄式”晚餐,意外...
导读都说结婚之前叫人家小甜甜,结婚之后便彻底变成了牛夫人。曾经... -
环球快资讯丨全新smart精灵#3在华上市并...
6月1日,全新smart精灵 3中国上市发布会在线上举行。发布会上,全... -
通顺河水质优于目标 武汉经开区补偿300...
通顺河水质优于目标武汉经开区补偿300万元给仙桃通顺河流域生态补偿... -
7金6银4铜,集体一等奖!郑州九中再获佳...
郑州市第八届中小学生“简化少林拳”锦标赛郑州九中获奖证书获得市...
精彩放送
-
【环球新视野】Qt Tablewidget表格数据...
QT里面自带的TableWidget控件可以实现表格显示的功能,刚开始学习Ta... -
连爆大冷,刘圣书/谭宁暴打世界第15迎双...
北京时间6月1日,2023泰国羽毛球公开赛super500继续进行。1 4决赛... -
环球快资讯丨全新smart精灵#3在华上市并...
6月1日,全新smart精灵 3中国上市发布会在线上举行。发布会上,全... -
【原】男子晒媳妇“糊弄式”晚餐,意外...
导读都说结婚之前叫人家小甜甜,结婚之后便彻底变成了牛夫人。曾经... -
通顺河水质优于目标 武汉经开区补偿300...
通顺河水质优于目标武汉经开区补偿300万元给仙桃通顺河流域生态补偿... -
7金6银4铜,集体一等奖!郑州九中再获佳...
郑州市第八届中小学生“简化少林拳”锦标赛郑州九中获奖证书获得市... -
国内第12轮油价调整将于6月13日开启-当前快讯
今日2023年6月2日星期五,由于昨日国际油价上涨压制了国内油价下跌... -
环球快播:通源环境:6月1日融资买入29....
6月1日,通源环境(688679)融资买入29 16万元,融资偿还39 64万... -
岚县:王小明在滨河社区调研 每日快报
5月31日,县委副书记、县长王小明深入滨河社区调研,和群众面对面谈... -
溢价率是什么意思你知道吗(溢价率是什...
来为大家解答以上的问题。溢价率是什么意思你知道吗,溢价率是什么...