Qt编程进阶(25):Qt对Excel的基本读写操作
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表格的内容,如图所示。
————————————————
觉得有用的话请关注点赞,谢谢您的支持!
对于本系列文章相关示例完整代码有需要的朋友,可关注并在评论区留言!