Qt编程进阶(25):Qt对Excel的基本读写操作

Qt编程进阶(25):Qt对Excel的基本读写操作

编码文章call10242025-05-07 11:59:134A+A-

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表格的内容,如图所示。

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

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

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

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4