网站首页 > 博客文章 正文
Excel软件具有完善的电子表格处理和计算功能,可在表格特定行列的单元格上定义公式,对其中的数据进行批量运算处理,用Qt操作Excel可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能就能极大地减轻Qt程序本身的计算负担。
本文通过一个实例演示Qt对Excel的基本读写操作。
1. 程序界面
创建一个Qt桌面应用程序项目,项目名称为“ExcelBasic”。设计程序界面,Qt对Excel基本读写程序界面如图所示。
2. 全局变量及方法
为了提高程序代码的使用效率,通常建议将程序中公用的Office对象的句柄声明为全局变量,定义在项目.h头文件中。
“mainwindow.h”头文件的代码如下:
#include <QMainWindow>
#include <QMessageBox>
#include <QAxObject> //访问 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表格的内容,如图所示。
————————————————
觉得有用的话请关注点赞,谢谢您的支持!
对于本系列文章相关示例完整代码有需要的朋友,可关注并在评论区留言!
- 上一篇: Qt:QFile类(qt中的类是什么)
- 下一篇: Qt之QTableview显示及单元格内容获取
猜你喜欢
- 2025-06-09 详解RTP协议之H264封包和解包实战
- 2025-06-09 Qt开发经验小技巧146-150(qt开发项目)
- 2025-06-09 Qt Concurrent的使用(qt线程使用)
- 2025-06-09 Qt编写全能播放组件(支持ffmpeg2/3/4/5/6/Qt4/5/6)
- 2025-06-09 「Qt入门第24篇」 数据库(四)SQL查询模型QSqlQueryModel
- 2025-06-09 C++解析头文件-Qt自动生成信号声明
- 2025-06-09 这个C++ Qt 文件传输方案性能飙升300%,GitHub冲上热榜
- 2025-06-09 Qt之QTableview显示及单元格内容获取
- 2025-06-09 Qt:QFile类(qt中的类是什么)
- 2025-06-09 Qt快速入门(工程的创建、UI界面布局、多线程、项目)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)