咔片PPT · AI自动生成演示文稿,模板丰富、排版精美 讯飞智文 · 一键生成PPT和Word,高效应对学习与办公

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_OBJECT public: 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"); //保存 Excel workbook->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"); //打开 Excel workbook = 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表格的内容,如图所示。

————————————————

觉得有用的话请关注点赞,谢谢您的支持!

对于本系列文章相关示例完整代码有需要的朋友,可关注并在评论区留言!