QT学习:Qt对Office的基本读写

Excel软件具有完善的电子表格处理和计算功能,可在表格特定行列的 单元格上定义公式,对其中的数据进行批量运算处理,用Qt操作Excel 可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能 就能极大地减轻Qt程序本身的计算负担。Word是最为常用的办公软 件,很多日常工作资料都是以Word文档格式保存的。用Qt既可以对 Word中的文字也可以对表格中的信息进行读写。
下面通过一个例子详细讲解Qt对Excel和Word 的基本读写操作。

一、程序界面

创建一个Qt桌面应用程序项目,项目名称为OfficeHello,为了方便对比Qt对两种不同类型文档的 操作,设计程序界面,Qt对Office基本读写程序界面如图所示:
在这里插入图片描述
分别用两个分组框(QGroupBox)演示对相同文字内容的读写功能。界面上各控件我们都用数字序号 ①,②,③,…标注,其名称、类型及属性设置见下图:
在这里插入图片描述

二、全局变量及方法

为了提高程序代码的使用效率,通常建议将程序中公用的Office对象的句柄声明为全局变量,定义在项目.h头文件中。 后面实现具体读写功能的代码皆在 mainwindow.cpp源文件中。

mainwindow.h头文件的代码如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
#include <QAxObject>								//访问Office对象类
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_writeExcelPushButton_clicked();			//写Excel按钮单击事件槽
    void on_readExcelPushButton_clicked();			//读Excel按钮单击事件槽
    void on_writeWordPushButton_clicked();			//写Word按钮单击事件槽
    void on_readWordPushButton_clicked();			//读Word按钮单击事件槽
private:
    Ui::MainWindow *ui;
    QAxObject *myexcel;									//Excel应用程序指针
    QAxObject *myworks;									//工作簿集指针
    QAxObject *workbook;								//工作簿指针
    QAxObject *mysheets;								//电子表格集指针
    //
    QAxObject *myword;									//Word应用程序指针
    QAxObject *mydocs;									//文档集指针
    QAxObject *document;								//文档指针
    QAxObject *paragraph;								//文本段指针
};
#endif // MAINWINDOW_H

三、对Excel的读写

对电子表格的基本读写,在构造方法中添加如下代码:

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"); //获取电子表格集 
} 

写Excel的事件方法代码:

void MainWindow::on_writeExcelPushButton_clicked() 
{ 
mysheets->dynamicCall("Add"); //添加一个表 
QAxObject *sheet = workbook->querySubObject("ActiveSheet"); //指向当前活动表格 
sheet->setProperty("Name", "我爱Qt"); //给表格命名 
QAxObject *cell = sheet->querySubObject("Range(QVariant, QVariant)", "C3"); //指向C3单元格 
QString inStr = ui->InExcelLineEdit->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:\\Qt\\office\\我爱 Qt5.xls"); //保存Excel 
workbook->dynamicCall("Close()"); 
myexcel->dynamicCall("Quit()"); 
QMessageBox::information(this, tr("完毕"), tr("Excel工作表已保存。")); 
ui->writeExcelPushButton->setEnabled(false); 
ui->readExcelPushButton->setEnabled(true); 
} 

读Excel的事件方法代码:

void MainWindow::on_readExcelPushButton_clicked() 
{ 
myexcel = new QAxObject("Excel.Application"); 
myworks = myexcel->querySubObject("WorkBooks"); 
myworks->dynamicCall("Open(const QString&)", "d:\\Qt\\office\\我爱 Qt5.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->OutExcelLabel->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->writeExcelPushButton->setEnabled(true); 
ui->readExcelPushButton->setEnabled(false); 
} 

程序运行后,单击“写入”按钮,弹出消息框提示Excel工作表已保存,即说明界面文本框里的文字 “我爱最新的 Qt 5.11”已成功写入Excel表格,为试验英文语句的读写,程序在后台还往Excel另一张表中 写入了一句“Hello!I love Qt.”。写入完成后,原“写入”按钮变为不可用,“读出”按钮则变为可用。 单击“读出”按钮,标签框中会输出刚刚写入保存的Excel单元格内容(“我爱最新的 Qt 5.11”),同时弹出消息框显示另一句英文文本“Hello!I love Qt.”,如下图所示:
在这里插入图片描述
该程序在计算机d:\Qt\office\路径下生成了一个名为“我爱Qt5.xls”的Excel文件,打开后可看到之前 Qt写入Excel表格的内容,如图所示:
在这里插入图片描述

四、对Word的读写

用Qt对Word文档进行最简单的基本读写操作,在构造方法中添加代码如下:

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
ui->setupUi(this); 
... 
myword = new QAxObject("Word.Application"); 
mydocs = myword->querySubObject("Documents"); //获取文档集 
mydocs->dynamicCall("Add(void)"); //添加一个文档 
document = myword->querySubObject("ActiveDocument"); //指向当前活动文档 
paragraph = myword->querySubObject("Selection"); //指向当前选中文本 
} 

写Word的事件方法代码:

void MainWindow::on_writeWordPushButton_clicked() 
{ 
QString inStr = ui->InWordLineEdit->text(); 
paragraph->dynamicCall("TypeText(const QString&)", inStr);//写入从界面文本框获取的文本 
paragraph->dynamicCall("TypeText(const QVariant&)",QVariant("\nHello!I love Qt.")); //写入指定的文本 
document->dynamicCall("SaveAs(const QString&)","d:\\Qt\\office\\我爱 Qt5.doc"); //保存文档 
delete paragraph; 
paragraph = nullptr; 
document->dynamicCall("Close()"); 
myword->dynamicCall("Quit()"); 
QMessageBox::information(this, tr("完毕"), tr("Word文档已保存。")); 
ui->writeWordPushButton->setEnabled(false); 
ui->readWordPushButton->setEnabled(true); 
} 

读Word的事件方法代码:

void MainWindow::on_readWordPushButton_clicked() 
{ 
myword = new QAxObject("Word.Application"); 
mydocs = myword->querySubObject("Documents"); //获取文档集 
mydocs->dynamicCall("Open(const QString&)","d:\\Qt\\office\\我爱 Qt5.doc"); //打开文档 
document = myword->querySubObject("ActiveDocument"); //指向活动文档 
paragraph = document->querySubObject("Range()"); //指向当前文本 
QString outStr = paragraph->property("Text").toString();//读出文本 
ui->OutWordLabel->setText(outStr.split("H").at(0)); 
paragraph = document->querySubObject("Range(QVariant, QVariant)", 14, 30); 
outStr = paragraph->property("Text").toString(); 
delete paragraph; 
paragraph = nullptr; 
document->dynamicCall("Close()"); 
myword->dynamicCall("Quit()"); 
QmessageBox::information(this, tr("消息"), outStr); 
ui->writeWordPushButton->setEnabled(true); 
ui->readWordPushButton->setEnabled(false); 
} 

运行效果 与上面Excel读写操作类同,运行程序的输出效果如图所示:
在这里插入图片描述

该程序在计算机d:\Qt\office\路径下生成了一个名为“我爱 Qt5.doc”的Word文档,打开后可看到之前Qt写入Word文档中的文字,如下图所示:
在这里插入图片描述

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt Excel读写库是为了方便在Qt应用程序中实现与Excel文件的读写操作而设计的一个库。它提供了一套简单易用的函数和类,可以帮助开发者轻松地读取、写入、修改Excel文件的内容。 Qt Excel读写库可以实现各种常见的Excel操作,比如读取单元格的数值、文本、日期等数据,修改单元格的内容,新增、删除、复制、移动工作表,设置样式和格式,创建图表等等。开发者只需要引入相应的头文件,并在代码中使用库中提供的函数和类,即可完成对Excel文件的读写操作。 使用Qt Excel读写库,开发者可以方便地将Qt应用程序与Excel文件进行数据交互。比如,可以通过读取Excel中的数据,将其展示在Qt应用程序的界面上;同时,可以在Qt应用程序中生成数据,并将数据写入Excel表格中,以实现数据的导出等功能。 Qt Excel读写库的优点在于其简洁易用、功能丰富。它不仅提供了基本读写功能,还支持复杂的Excel操作,如合并单元格、设置列宽、行高等。此外,Qt Excel读写库在性能方面也表现出色,能够处理大量数据,确保数据读写的效率和稳定性。 总的来说,Qt Excel读写库是一个强大而实用的工具,在Qt应用程序与Excel文件之间建立了方便快捷的桥梁,为开发者提供了丰富的功能和灵活的操作,使得Excel数据的读取、写入和处理变得更加简单高效。 ### 回答2: QT Excel读写库是一种用于在QT框架下进行Excel文件读写操作的工具库。该库具有方便易用的特点,能够帮助开发人员快速进行Excel文件的读取和写入操作。 首先,QT Excel读写库提供了一系列简洁明了的API,使得开发人员可以轻松地打开Excel文件,并读取其中的数据。通过该库,可以直接访问Excel文件中的单元格、行和列,并获取相应的数值、文本、日期等信息。这大大简化了开发人员处理Excel文件的过程。 其次,QT Excel读写库还支持对Excel文件进行写入操作。通过该库,开发人员可以方便地将数据写入到Excel文件的特定位置,或者新增行或列,并在其中填入数据。此外,该库还支持对单元格样式的设置,使得生成的Excel文件更具美观性和可读性。 除此之外,QT Excel读写库还能够处理一些复杂的Excel文件操作,例如合并单元格、插入图片、修改工作表名称等。这些功能的支持使得开发人员能够更加灵活地处理Excel文件,满足不同的需求。 总之,QT Excel读写库是一款功能强大、易于使用的工具库,可以帮助开发人员轻松进行Excel文件的读取和写入操作,大大提高了开发效率,并且可以应用于各种需要处理Excel文件的项目中。 ### 回答3: Qt Excel读写库是一个基于Qt框架的工具库,专门用于在Qt应用程序中实现对Excel文件的读写操作。该库提供了一系列的类和函数,方便开发者进行Excel数据的导入和导出操作。 Qt Excel读写库的主要特点包括: 1. 支持多种Excel文件格式:该库可以读写常见的Office Excel文件格式,包括xls和xlsx格式。无论是旧版的Excel文件,还是较新的Excel文件,都可以进行读写操作。 2. 简洁易用的API:库提供了一组简洁易用的API,使开发者能够轻松地实现Excel文件的读写操作。开发者只需要调用相应的函数,即可实现打开、保存、读取、写入Excel文件的功能。 3. 支持各种数据类型:Qt Excel读写库支持读写Excel文件中各种常见的数据类型,包括整型、浮点型、字符串等。开发者可以方便地读取和写入不同类型的数据,满足各种数据处理需求。 4. 支持自定义样式:除了读写数据之外,库还支持设置 Excel 文件的各种样式,如字体、颜色、边框等。开发者可以根据需要设置单元格的样式,使得生成的 Excel 文件更具有可读性和美观性。 5. 跨平台支持:Qt Excel读写库基于Qt框架开发,因此可以在多个平台上运行。不论是Windows、Linux还是MacOS等,开发者都可以方便地使用该库进行 Excel 文件的读写操作。 总结起来,Qt Excel读写库是一个功能强大、易于使用且跨平台的工具库,可以方便地在Qt应用程序中进行 Excel 文件的读取和写入操作,适用于各种需要处理 Excel 数据的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值