Excel软件具有完善的电子表格处理和计算功能,可在表格特定行列的单元格上定义公式,对其中的数据进行批量运算处理,用Qt操作Excel可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能就能极大地减轻Qt程序本身的计算负担 。
本文通过一个实例演示Qt对Excel的基本读写操作 。
1. 程序界面
创建一个Qt桌面应用程序项目,项目名称为“ExcelBasic” 。设计程序界面,Qt对Excel基本读写程序界面如图所示 。
2. 全局变量及方法
为了提高程序代码的使用效率,通常建议将程序中公用的Office对象的句柄声明为全局变量,定义在项目.h头文件中 。“mainwindow.h”头文件的代码如下:
#include #include #include //访问 Office 对象类class MainWindow : public QMainWindow{ Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_btnWrite_clicked(); //写 Excel 按钮单击事件槽void on_btnRead_clicked(); //读 Excel 按钮单击事件槽private:Ui::MainWindow *ui;QAxObject *myexcel; //Excel应用程序指针QAxObject *myworks; //工作簿集指针QAxObject *workbook; //工作簿指针QAxObject *mysheets; //电子表格集指针}; 3. 对Excel的读写
对于对电子表格的基本读写,介绍下列几点:(1) 在构造方法中添加如下代码:
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ui->setupUi(this);myexcel = new QAxObject("Excel.Application");myworks = myexcel->querySubObject("WorkBooks"); //获取工作簿集myworks->dynamicCall("Add"); //添加工作簿workbook = myexcel->querySubObject("ActiveWorkBook"); //获取当前活动工作簿mysheets = workbook->querySubObject("Sheets"); //获取电子表格集}(2) 写Excel的事件方法代码:
void MainWindow::on_btnWrite_clicked(){mysheets->dynamicCall("Add"); //添加一个表QAxObject *sheet = workbook->querySubObject("ActiveSheet");//指向当前活动表格sheet->setProperty("Name","QtExcel"); //给表格命名QAxObject *cell = sheet->querySubObject("Range(QVariant, QVariant)", "C3"); //指向C3单元格QString inStr = ui->edtWrite->text();cell->dynamicCall("SetValue(const QVariant&)", QVariant(inStr)); //向单元格写入内容sheet = mysheets->querySubObject("Item(int)",2); //指向第二个表格sheet->setProperty("Name", "Hello Qt");cell = sheet->querySubObject("Range(QVariant,QVariant)","B5");cell->dynamicCall("SetValue(const QVariant&)", QVariant("Hello! I love Qt."));workbook->dynamicCall("SaveAs(const QString&)", "D:\Temp\QtExcel.xls"); //保存 Excelworkbook->dynamicCall("Close()");myexcel->dynamicCall("Quit()");QMessageBox::information(this, tr("完毕"),tr("Excel工作表己保存"));ui->btnWrite->setEnabled(false);ui->btnRead->setEnabled(true);}(3) 读Excel的事件方法代码:
void MainWindow::on_btnRead_clicked(){myexcel = new QAxObject("Excel.Application");myworks = myexcel->querySubObject("WorkBooks");myworks->dynamicCall("Open(const QString&)", "D:\Temp\QtExcel.xls"); //打开 Excelworkbook = myexcel->querySubObject("ActiveWorkBook");mysheets = workbook->querySubObject("Worksheets");QAxObject *sheet = workbook->querySubObject("Sheets(int)", 1);QAxObject *cell = sheet->querySubObject("Range(QVariant, QVariant)", "C3");QString outStr = cell->dynamicCall("Value2()").toString(); //读出C3单元格内容ui->edtRead->setText(outStr);sheet = workbook->querySubObject("Sheets(int)", 2); //定位到第二张表cell = sheet->querySubObject("Range(QVariant, QVariant)", "B5");outStr = cell->dynamicCall("Value2()").toString(); //读出 B5 单元格内容workbook->dynamicCall("Close()");myexcel->dynamicCall("Quit()");QMessageBox::information(this,tr("消息"),outStr);ui->btnWrite->setEnabled(true);ui->btnRead->setEnabled(false);}(4) 运行效果 。
程序运行后,单击“写入”按钮 , 弹出消息框提示Excel工作表已保存,即说明界面文本框里的文字“我爱Qt编程”己成功写入Excel表格,为试验英文语句的读写,程序在后台还往Excel另一张表中写入了一句“Hello! I love Qt.” 。写入完成后,原“写入”按钮变为不可用,“读出”按钮变为可用 。

单击“读出”按钮,标签框中会输出刚刚写入保存的Excel单元格内容(“我爱Qt编程”),同时弹出消息框显示另一句英文文本“Hello! I love Qt.”,如图所示 。

该程序在计算机“D:Temp”路径下生成了一个名为“QtExcel.xls”的Excel文件 , 打开后可看到之前Qt写入Excel表格的内容,如图所示 。

————————————————
觉得有用的话请关注点赞,谢谢您的支持!
【25 Qt编程进阶:Qt对Excel的基本读写操作】对于本系列文章相关示例完整代码有需要的朋友,可关注并在评论区留言!
