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

43 篇文章 16 订阅
订阅专栏

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文档中的文字,如下图所示:
在这里插入图片描述

QT读写word
08-25
QT 5.11使用word模板加标签,读写自动生成word文档。编译测试通过。
Qt实现Excel表格的读写操作(office,WPS)
热门推荐
Jared_Chen的博客
11-05 2万+
我们用QT经常会将表格的数据导入数据库或者将数据库中的数据导出为*.xls/*.xlsx。使用比较多的就是用QAxObject对象进行操作。一般首先会连接数据库: QAxObject *excel = new QAxObject(this); //连接Excel控件 excel-&gt;setControl("Excel.Application"); 但是很多人的电脑上并没有安装office...
使用Qtword文档进行读写
最新发布
m0_51415606的博客
06-02 859
vs2022 + Qt 5.9.1 + msvc2017_x64,在文章最后提供了源码。测试用例实现了插入文本、插入图片、对表格进行插入行、创建表格、给表格添加内容的功能。Qt对于word文档的操作都是在书签位置进行插入文本、图片或表格的操作。除了基本的gui、core、widget库外,还需要ActiveQt库。我是在vs2022上进行开发,换成qt creator同理。右键属性选择-》Qt projecting-》勾选这几个。在想要插入的地方设置书签。链接器-》常规-》输入。
C++(Qt) 和 Word、Excel、PDF 交互总结
future_ai的博客
03-16 2326
日常开发软件可能会遇到这类小众需求,导出数据到Word、Excel以及PDF文件,如果你使用C++编程语言,那么可以选择的方案不是很多,恰好最近刚好有这部分需求,整理下这段时间踩过的坑,方便后人
Qt5操作OfficeWord读写实例
weixin_44759598的博客
12-28 7049
本节将会给大家带来Qt连接Office读写Word读写的实例Excel 软件具有完善的电子表格处理和计算功能,可在表格特定行列的单元格上定义公式,对其中的数据进行批量运算处理,用 Qt 操作 Excel 可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能就能极大地减轻 Qt 程序本身的计算负担。故Qt5操作OfficeWord读写在应用开发中是经常用到的。
QT进行Word文档读写
WMT1520的博客
12-13 7256
界面如下: .pro文件中要加入以下代码 CONFIG += qaxcontainer .h文件如下 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QAxWidget> #include <QAxObject> #define FilePath "C:/temp/" //存放路径 namespace Ui { class Widget; } class Widget : pu
C++ QT读写Microsoft Word文档基操
Hello___Sunshine的专栏
06-07 2044
在这个示例中,我们使用了`QAxObject`类来与Microsoft Word进行交互。`QAxObject`是QT中的一个ActiveX控件,可以用来与Windows应用程序进行交互。在`readWordDocument`函数中,我们打开了一个Word文档,遍历了文档中的所有段落,并打印了每个段落的文本内容。在`writeWordDocument`函数中,我们创建了一个新的Word文档,向其中插入了一段文本,并保存了文档。// 读取Word文档。// 写入Word文档。
ExcelBase_qt基于office读写excel表_ExcelBase_
10-02
在给定的标题"ExcelBase_qt基于office读写excel表_ExcelBase_"和描述"qt基于office读写excel,代码简介,易懂"中,我们可以理解这是一个关于使用Qt库与Microsoft Office的Excel接口进行交互的项目。 Qt是一个跨平台...
QtXlsx 完美读写Excel 跨平台 免安装Office 附带很多优美示例
03-04
QtXlsx不仅能够实现基本读写功能,还提供了丰富的示例代码,帮助开发者更便捷地掌握其用法。 QtXlsx库的核心功能包括: 1. **读取Excel文件**:你可以通过QtXlsx读取Excel文件中的工作表、单元格、行、列等数据...
Qtxlsx读写Excel
04-06
3. **支持格式化**:除了基本的数据读写Qtxlsx还允许设置单元格的样式,如字体、颜色、对齐方式、边框、填充等,使得输出的Excel文件具有良好的视觉效果。 4. **操作工作表**:你可以添加、删除、重命名工作表,...
qt开发office文档编辑器思路
06-11
Qt开发环境中构建一个Office文档编辑器,主要是利用Qt的ActiveX容器(QAxWidget)来集成Microsoft Office的COM组件,实现对Word、Excel等办公软件文档的读写和编辑功能。以下是关于如何使用Qt开发Office文档编辑器...
QT实现Word读写
nameofhsw的专栏
01-07 1万+
在windows环境下,我们可以通过ActiveQt实现Office自动化,相当于VB的VBA功能。 以下是一个实例: #include #include #include int main(int argc, char *argv[]) {     QApplication a(argc, argv);     //显示的打开一个word应用程序     QAxW
linuxqt浏览word文件内容,Qt获取office文件内容
weixin_33921444的博客
05-09 1204
Qt获取office文件内容需要获取word文件的文件内容。网上找了好久,大部分都是excel的。而word的很少。所以在这里记录一下,方便大家查阅和自己使用。使用的Qt版本是5.4.2 。下面通过代码说明:首先在.pro文件中加入QT += axcontainer需要加入以下头文件#include #include 详细代码如下voidQt_word(QStringfilePat...
QT读取Word文档
qq_41973378的博客
06-08 5608
Word文档读取 开发工具与关键技术:QtCreator、C++ 作者:何任贤 撰写时间:2020年06月02日 Word文档读取 我们先要在工程文件加入 QT += axcontainer 我们要用到的头文件有 #include #include 读取word文档基本流程: 启动Word进程、获取Word文档集。 获取和操作当前选中的段落。 类声明 class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *pare
Qt+Pyhton实现麒麟V10系统下word文档读写功能
北极星的技术笔记
08-17 1633
有这样一个需求,把某个软件中采集的数据按照特定的格式导出到world文档中。因为程序是用Qt开发的,所以想找一个满足要求的C++库,通过一番查询发现能完成这个需求的常用C++库有LibreOffice、OpenOffice。这两个库虽然能实现这一需求但是学习成本比较高,在规定的时间内完成这个需求比较困难。这时只能将目光转向其他语言的读写word文档的库上,我发现python-docx 这个库不仅能实现需求而且学习成本很低,只要懂点Python几乎不需要额外花时间就能学会使用这个库。
QtQt读取/修改Excel文件
FourJin的博客
08-02 751
qt读取excel文件,并修改单元格中的数据。 qt保存excel文件时报错及解决方法。
Qt5 Python-docx库的使用,Qt python混合编程,qt 读写word,不依赖office
没用的阿吉
10-26 1148
参考:模板方案推荐方式无法插入图片无法插入图片。
qt excel 读写
07-08
Qt Excel读写库是一个基于Qt框架的工具库,专门用于在Qt应用程序中实现对Excel文件的读写操作。该库提供了一系列的类和函数,方便开发者进行Excel数据的导入和导出操作。 Qt Excel读写库的主要特点包括: 1. 支持...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 距离向量路由算法 15674
  • 小世界网络模型 13538
  • QT学习:图形视图Graphics View 11336
  • 无权无向和加权网络的聚类系数 10018
  • 平均路径长度与直径 9974

分类专栏

  • 网络安全 30篇
  • 机器学习 5篇
  • 复杂网络 3篇
  • 网络空间安全导论思维导图 1篇
  • 网络科学导论 24篇
  • 工程数学基础 1篇
  • Linux笔记 83篇
  • 网络编程 32篇
  • 计算机网络 63篇
  • 嵌入式学习 1篇
  • pytnon学习 10篇
  • oracle 21篇
  • QT学习 43篇

最新评论

  • 无权无向和加权网络的聚类系数

    handesame: 同问,大佬找到了吗

  • 无权无向和加权网络的聚类系数

    twinklestar233: 作者您好 请问上述参考文献有吗

  • QT学习:基于TCP的网络聊天室程序

    edifier_nz: TcpServer(QWidget *parent = 0,Qt::WindowFlags f=0); 报错提示无法从int转变为Qt::WindowFlags,怎么解决哪?

  • 基于模块度的社团检测算法

    Iverson1900: 都是书上的自己得一点没有

  • 无权无向和加权网络的聚类系数

    普通网友: 作者大大文章写得超级好!目前只学会了无权网络的聚类系数matlab代码,请问作者能否提供有权网络聚类系数计算的matlab代码啊

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • shell环境与变量
  • firewalld标准规则
  • iptables实战
2022年33篇
2021年246篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

PHP网站源码坑梓企业网站制作坪地企业网站建设深圳设计网站塘坑seo网站优化广州如何制作网站深圳网站推广方案大芬网站制作设计西乡推广网站南山网站优化按天计费大浪百度网站优化排名西乡网站定制坪山网站改版大芬企业网站设计大浪建设网站福田如何制作网站坂田营销网站南联模板制作坂田百姓网标王吉祥百姓网标王宝安SEO按天计费深圳网站制作荷坳网站优化按天扣费松岗关键词按天计费东莞标王盐田建网站龙华网站排名优化龙华网站优化按天收费东莞百度网站优化排名广州建设网站沙井网站排名优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化