Qt Tablewidget表格数据的导出和导入

您所在的位置:网站首页 eviews8导入excel数据 Qt Tablewidget表格数据的导出和导入

Qt Tablewidget表格数据的导出和导入

2023-06-07 04:49| 来源: 网络整理| 查看: 265

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()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(); headerquerySubObject("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()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3