您的位置:首页 >行情 >

【环球新视野】Qt Tablewidget表格数据的导出和导入

2023-06-02 15:42:00    来源:QT教程

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开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

关键词:

相关阅读

精彩放送