700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Qt实战案例(4)——利用Qt读取Excel表格

Qt实战案例(4)——利用Qt读取Excel表格

时间:2020-11-06 14:47:13

相关推荐

Qt实战案例(4)——利用Qt读取Excel表格

目录

前言.Qt操作Excel基本流程介绍1.启动Excel进程,获取Excel工作簿集2.获取电子表格集3.操作单元格及其数据 一、项目介绍二、项目基本配置2.1 添加基础文件2.2 添加axcontainer 三、UI界面设计四、主程序实现4.1 mainwindow.h头文件4.2 mainwindow.cpp源文件 五、效果演示六、拓展

前言.Qt操作Excel基本流程介绍

QAxObject:

QAxObject是Qt提供给程序员从代码中访问Office的对象类,其本质上是一个面向微软操作系统的COM接口,它操作Excel的基本流程如下:

QAxObject将所有Office的工作簿、表格、文档等都作为其子对象,程序员通过调用querySubObject()这个统一的方法来获取各个子对象的实例,再用dynamicCall()方法执行各对象上的具体操作。

1.启动Excel进程,获取Excel工作簿集

创建Excel进程使用如下语句:

QAxObject *myexcel = new QAxObject("Excel.Application");

其中,myexcel为进行的实例对象名,该名称由用户自己定义,整个程序中引用一致即可。

通过进程获取Excel工作簿集,语句为:

QAxObject *myworks = myexcel->querySubObject("WorkBooks");

其中,myworks是工作簿集的引用,用户可根据需要定义其名称,同样,在程序中也要求引用一致。

有了Excel进程和工作簿集的引用,就可以使用它们对Excel进行一系列文档级别的操作。例如:

myworks->dynamicCall("Add");//添加一个工作簿myexcel->querySubObject("ActiveWorkBook"); //获取当前活动的工作簿

2.获取电子表格集

每个Excel工作簿中都可以包含若干电子表格(Sheet),通过打开的当前工作簿获取其所有电子表格的程序语句为:

QAxObject *mysheets = workbook->querySubObject("Sheets");

其中,workbook也是一个QAxObject对象,引用的是当前正在操作的一个活动工作簿。

同理,在获取了电子表格集后,就可以像操作工作簿文档那样,对其中的表格执行各种操作。例如:

mysheets->dynamicCall("Add");//添加一个表格workbook->querySubObject("ActiveSheet") //获取工作簿中当前活动表格sheet->setProperty("Name",字符串) //给表格命名

3.操作单元格及其数据

对Excel的操作最终要落实到对某个电子表格单元格中数据信息的读写上,在Qt中的Excel单元格同样是作为QAxObject对象来看待的,对它的操作通过其所在表格的QAxObject对象句柄执行,如下:

QAxObject *cell = sheet->querySubObject("Range(QVariant, QVariant)", 单元格编号); cell->dynamicCall("SetValue(const QVariant&)", QVariant(字符串));

这样,就实现了对Excel各个级别对象的灵活操作和使用。

为避免资源无谓消耗和程序死锁,通常在编程结束时还必须通过语句释放该Excel进程所占据的系统资源,如下:

workbook->dynamicCall("Close()"); //关闭工作簿 myexcel->dynamicCall("Quit()"); //退出进程

一、项目介绍

利用Qt读取Excel表格并实现显示行数列数及写入指定数据的功能。

二、项目基本配置

2.1 添加基础文件

这里我写了操作Excel的两个基础文件,分别为exceloperater.h和exceloperater.cpp。需要用的时候直接在Headers和Sources内右键添加现有文件,将其加入即可。

这里简单介绍一下这两个文件。exceloperater.cpp文件封装了几个函数,分别为:

void createExcel(QString fileName);//创建Excel文件void saveExcel();//保存Excel文件void quitExcel();//退出Excel文件void operaterOver();//保存并退出Excel文件void setCellValue(const int &row,const int &colum,const QString &text);//向单元格写入数据int getSheetIndex(const QString &sheetName) const;//返回工作表索引void setCurrentWorkSheet(const int &index);//设置当前工作表int getWorkSheetCount();//获取工作表个数void getSheetListFromWorkBook();//获取工作表bool judgeExistSheet(const QString &sheetName);//判断工作簿种是否存在指定的工作表void addNewSheet(const QString &sheetName);//添加新的工作表QStringList getSheetsList() const;//获取工作表列表void getCurrentSheetData();//获取工作表中的数据

有需要这两个文件的可以到这里下载:/download/didi_ya/24833460

2.2 添加axcontainer

记住:若要操作Excel文件,首先要在pro项目种添加QT+=axcontainer

三、UI界面设计

基础UI界面如下:

界面中创建了5个控件,其名称和类型如下表所示:

四、主程序实现

4.1 mainwindow.h头文件

核心代码如下:

private slots:void on_select_clicked();//读取Excel文件void on_row_column_clicked();//显示行数和列数void on_write_clicked();//向Excel中写入数据private:Ui::MainWindow *ui;ExcelOperater *my_excel;//ExcelOperater对象QString my_operaterFileName;//文件名

4.2 mainwindow.cpp源文件

主程序:

my_excel = new ExcelOperater;//创建Excel对象my_operaterFileName.clear();//清空文件名

点击选择文件按钮选择文件:

//选择Excel文件并显示路径void MainWindow::on_select_clicked(){my_operaterFileName = QFileDialog::getOpenFileName(this, tr("打开文件"),QDir::currentPath(),tr("excel files(*.xls *.xlsx)"));qDebug() << "操作的文件是:" << my_operaterFileName;ui->lineEdit->setText(my_operaterFileName);//显示my_excel->createExcel(my_operaterFileName);}

点击显示行列按钮显示最大行数和列数:

//获取行数和列数void MainWindow::on_row_column_clicked(){my_excel->getCurrentSheetData();int RowNum=my_excel->getSheetRowCount();//获取最大行数int ColumnNum=my_excel->getSheetColumnCount();//获取最大列数ui->label->setText(QString("最大行数:%1\n最大列数:%2").arg(RowNum).arg(ColumnNum));}

点击写入数据按钮写入指定的数据:

//向Excel中写入数据void MainWindow::on_write_clicked(){bool ok;QString text = QInputDialog::getText(this, tr("Input Data"),tr("请输入要写入的内容:"), QLineEdit::Normal,"",&ok);if (ok && !text.isEmpty()){//向第一行第一列第一个元素写入数据textmy_excel->setCellValue(1, 1, text);qDebug()<<"写入完成"<<text;}my_excel->operaterOver();}

五、效果演示

ok!以上便是利用Qt读取Excel表格的基础内容了。

全部完整代码可以参考:/download/didi_ya/24833900

六、拓展

如果你不喜欢这种分文件编写的代码,我也将读取Excel汇合在一个文件即主文件内,有需要的可以自行下载:

/download/didi_ya/24838723

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。