首页 > 编程知识 正文

qtablewidget清空数据,tablewidget唯一性

时间:2023-05-04 04:08:20 阅读:170717 作者:1874

文章目录1.xls/xlsx文件数据表小部件表2 .导出到表小部件表数据xls/xlsx文件

QT附带的table构件控件可以实现表格的显示功能。 刚开始学习表格构件,只是自己提前制作表格和决定数据,但真正的软件不会决定数据格式。 让我们看看如何导入xls文件并自动生成表。

我用的这个方法导入/导出比较慢,网上还有一个更快,所以有机会再写。

前期准备:

添加pro文件

QT =axcontainer

将#includeActiveQt/QAxObject添加到头文件

互联网上写着#include

根据版本的不同,代码的写法可能会不同。 我自己测试。

一.将xls/xlsx文件数据导入到表小部件表中

右键单击导入按钮并导航至该插槽,然后添加单击的代码

QString strData; void main window : on _ push button _ 17 _ clicked ((//首先,文件选择器对话框qstringcurpash=qdir 3360: current path ) ) //当前路径QString dlgTitle='选择表单文件'; //xls和xlsx格式的文件都可以,xlsx与xls兼容。 请注意,在每种类型之后添加两个分号QString filter='表文件(*.xls *.xlsx )。 xls文件(*.xls; xlsx文件(*.xlsx; 所有文件(*.* ); //创建文件选择对话框qstringlistfilelist=qfiledialog 33603360 getopenfilenames (this,dlgTitle,curPash,filter ); if (文件列表. count ) )1)返回; for(intI=0; ifileList.count (; I ()//保存文件地址strData=fileList.at(i ) I; 连接到Excel控件qaxobjectexcel (' excel.application ' ); //警告消息excel.setproperty('visible ',false ); //工作簿集合qaxobject * workbooks=excel.query subobject (' workbooks ); 工作簿动态呼叫(open (const qstring ),str ); //活动工作簿qaxobject * workbook=excel.query subobject (active workbook ); //获取工作表集合中的工作表1,输入sheet1qaxobject * worksheet=workbook-query subobject (' sheets (int ),1 ); QAxObject *range; 单元格值QString strVal='hull '; QStringList header; //将所有初始表矩阵设置为0ui-table构件设置行(0); //设置行数为0ui-table构件- set column count (0; //将列数设置为0 int count=0; for(intI=1; irow; I )请注意,setRowCount中的函数是总数,而不是附加函数。 很多人最初认为这个函数是总数,程序经常崩溃的UI-table widget-set rowcount (UI-table widget-rowcount () ); for(intj=1; jcolumn; j ) if(I==1) ui-table widget-set column count (ui-table widget-column count ) )1); range=worksheet-query subobject (cells (int,int ),I,j ); 要检索单元格值的strval=range-dynamic call (' value2() ) ) ).toString ); 标题; //设置表首}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,即sheet1 QAxObject *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));//保存至filepath workbook->dynamicCall("Close()");//关闭工作簿 excel->dynamicCall("Quit()");//关闭excel delete excel; excel=NULL; qDebug() << "n导出成功啦!!!"; }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。