QT基础篇(14)QT操作office实例
1.QT操作office的基本方式
通过QT操作Office软件,可以使用Qt的QAxObject类来进行操作。下面是一个例子,展示了通过Qt操作Excel的基本方式:
#include <QApplication>
#include <QAxObject>int main(int argc, char *argv[])
{QApplication app(argc, argv);QAxObject excel("Excel.Application");excel.setProperty("Visible", true);QAxObject *workbooks = excel.querySubObject("Workbooks");QAxObject *workbook = workbooks->querySubObject("Add");QAxObject *sheets = workbook->querySubObject("Sheets");QAxObject *sheet = sheets->querySubObject("Item(int)", 1);QAxObject *cell = sheet->querySubObject("Cells(int,int)", 1, 1);cell->setProperty("Value", "Hello, World!");workbook->dynamicCall("SaveAs(const QString&)", "C:\\path\\to\\file.xlsx");workbook->dynamicCall("Close(Boolean)", false);excel.dynamicCall("Quit()");delete cell;delete sheet;delete sheets;delete workbook;delete workbooks;return app.exec();
}
上述示例中,首先创建了一个QAxObject实例,指定了要操作的Office软件,这里是Excel。然后通过querySubObject方法来获取各种对象,例如Workbooks、Sheets和Cells。使用这些对象,可以执行各种操作,如添加工作簿、添加工作表、获取单元格并设置值等。最后,使用dynamicCall方法执行一些动态调用,例如保存工作簿,并关闭Excel应用程序。
通过类似的方式,你可以使用Qt来操作其他Office软件,如Word和PowerPoint。只需将上述示例中的"Excel.Application"替换为"Word.Application"或"PowerPoint.Application"即可。
需要注意的是,要在Qt项目中使用Qt的ActiveX模块,需要在Qt项目文件(.pro)中添加如下行:
QT += axcontainer
希望这个例子能帮到你,祝你成功操作Office软件!
2.QT对Excel/office的基本读写
通过Qt可以实现对Office软件(如Excel、Word和PowerPoint)的基本读写操作。以下是一些示例代码,展示了如何使用Qt来读取和写入Excel、Word和PowerPoint文档的基本方法:
读取Excel文档:
#include <QApplication>
#include <QAxObject>int main(int argc, char *argv[])
{QApplication app(argc, argv);QAxObject excel("Excel.Application");excel.setProperty("Visible", true);QAxObject *workbooks = excel.querySubObject("Workbooks");QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "C:\\path\\to\\file.xlsx");QAxObject *sheets = workbook->querySubObject("Sheets");QAxObject *sheet = sheets->querySubObject("Item(int)", 1);QAxObject *cell = sheet->querySubObject("Cells(int,int)", 1, 1);QString value = cell->property("Value").toString();qDebug() << "Cell A1 value: " << value;workbook->dynamicCall("Close(Boolean)", false);excel.dynamicCall("Quit()");delete cell;delete sheet;delete sheets;delete workbook;delete workbooks;return app.exec();
}
写入Excel文档:
#include <QApplication>
#include <QAxObject>int main(int argc, char *argv[])
{QApplication app(argc, argv);QAxObject excel("Excel.Application");excel.setProperty("Visible", true);QAxObject *workbooks = excel.querySubObject("Workbooks");QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "C:\\path\\to\\file.xlsx");QAxObject *sheets = workbook->querySubObject("Sheets");QAxObject *sheet = sheets->querySubObject("Item(int)", 1);QAxObject *cell = sheet->querySubObject("Cells(int,int)", 1, 1);cell->setProperty("Value", "Hello, World!");workbook->dynamicCall("Save()");workbook->dynamicCall("Close(Boolean)", false);excel.dynamicCall("Quit()");delete cell;delete sheet;delete sheets;delete workbook;delete workbooks;return app.exec();
}
读取Word文档:
#include <QApplication>
#include <QAxObject>int main(int argc, char *argv[])
{QApplication app(argc, argv);QAxObject word("Word.Application");word.setProperty("Visible", true);QAxObject *documents = word.querySubObject("Documents");QAxObject *document = documents->querySubObject("Open(const QString&)", "C:\\path\\to\\file.docx");QAxObject *selection = word.querySubObject("Selection");QString text = selection->property("Text").toString();qDebug() << "Document content: " << text;document->dynamicCall("Close(Boolean)", false);word.dynamicCall("Quit()");delete selection;delete document;delete documents;return app.exec();
}
写入Word文档:
#include <QApplication>
#include <QAxObject>int main(int argc, char *argv[])
{QApplication app(argc, argv);QAxObject word("Word.Application");word.setProperty("Visible", true);QAxObject *documents = word.querySubObject("Documents");QAxObject *document = documents->querySubObject("Add()");QAxObject *selection = word.querySubObject("Selection");selection->dynamicCall("TypeText(const QString&)", "Hello, World!");document->dynamicCall("SaveAs(const QString&)", "C:\\path\\to\\file.docx");document->dynamicCall("Close(Boolean)", false);word.dynamicCall("Quit()");delete selection;delete document;delete documents;return app.exec();
}
读取PowerPoint文档:
#include <QApplication>
#include <QAxObject>int main(int argc, char *argv[])
{QApplication app(argc, argv);QAxObject powerpoint("PowerPoint.Application");powerpoint.setProperty("Visible", true);QAxObject *presentations = powerpoint.querySubObject("Presentations");QAxObject *presentation = presentations->querySubObject("Open(const QString&)", "C:\\path\\to\\file.pptx");QAxObject *slides = presentation->querySubObject("Slides");QAxObject *slide = slides->querySubObject("Item(int)", 1);QAxObject *shapes = slide->querySubObject("Shapes");int shapeCount = shapes->property("Count").toInt();qDebug() << "Number of shapes in slide: " << shapeCount;presentation->dynamicCall("Close(Boolean)", false);powerpoint.dynamicCall("Quit()");delete shapes;delete slide;delete slides;delete presentation;delete presentations;return app.exec();
}
写入PowerPoint文档:
#include <QApplication>
#include <QAxObject>int main(int argc, char *argv[])
{QApplication app(argc, argv);QAxObject powerpoint("PowerPoint.Application");powerpoint.setProperty("Visible", true);QAxObject *presentations = powerpoint.querySubObject("Presentations");QAxObject *presentation = presentations->querySubObject("Add()");QAxObject *slides = presentation->querySubObject("Slides");QAxObject *slide = slides->querySubObject("Add(int, int)", 1, 1);QAxObject *shapes = slide->querySubObject("Shapes");QAxObject *textShape = shapes->querySubObject("AddTextEffect(int, const QString&, const QString&, double, double, double, double)");textShape->setProperty("Text", "Hello, World!");presentation->dynamicCall("SaveAs(const QString&)", "C:\\path\\to\\file.pptx");presentation->dynamicCall("Close(Boolean)", false);powerpoint.dynamicCall("Quit()");delete textShape;delete shapes;delete slide;delete slides;delete presentation;delete presentations;return app.exec();
}
请确保在Qt项目文件(.pro)中添加了QT += axcontainer以支持Qt的ActiveX模块。
希望以上示例能帮到你,祝你成功操作Office软件!
3.QT操作word应用
通过Qt可以使用ActiveX技术来操作Word应用。以下是一个示例代码,展示了如何使用Qt来打开Word应用、创建文档、写入内容和保存文档的基本方法:
#include <QApplication>
#include <QAxObject>int main(int argc, char *argv[])
{QApplication app(argc, argv);QAxObject word("Word.Application");word.setProperty("Visible", true);QAxObject *documents = word.querySubObject("Documents");QAxObject *document = documents->querySubObject("Add()");QAxObject *selection = word.querySubObject("Selection");selection->dynamicCall("TypeText(const QString&)", "Hello, World!");document->dynamicCall("SaveAs(const QString&)", "C:\\path\\to\\file.docx");document->dynamicCall("Close(Boolean)", false);word.dynamicCall("Quit()");delete selection;delete document;delete documents;return app.exec();
}
在该示例中,我们首先创建了一个QAxObject实例,用于表示Word应用。然后,我们设置了Visible属性为true,这样可以在打开的Word界面中看到操作过程。接下来,我们使用querySubObject方法获取了Documents对象,并通过Add方法创建了一个新的文档对象。然后,我们使用querySubObject方法获取了Selection对象,然后使用TypeText方法向文档中输入了"Hello, World!"的内容。最后,我们使用SaveAs方法将文档保存到指定路径,然后使用Close方法关闭文档。最后,我们调用Quit方法关闭Word应用。
请确保在Qt项目文件(.pro)中添加了QT += axcontainer以支持Qt的ActiveX模块。
希望以上示例能帮到你,祝你操作Word应用成功!
相关文章:
QT基础篇(14)QT操作office实例
1.QT操作office的基本方式 通过QT操作Office软件,可以使用Qt的QAxObject类来进行操作。下面是一个例子,展示了通过Qt操作Excel的基本方式: #include <QApplication> #include <QAxObject>int main(int argc, char *argv[]) {QA…...
重拾计网-第四弹 计算机网络性能指标
ps:本文章的图片内容来源都是来自于湖科大教书匠的视频,声明:仅供自己复习,里面加上了自己的理解 这里附上视频链接地址:1.5 计算机网络的性能指标(1)_哔哩哔哩_bilibili 目录 &#x…...
【Vue】Vue 路由的配置及使用
目录捏 前言一、路由是什么?1.前端路由2.后端路由 二、路由配置1.安装路由2.配置路由 三、路由使用1.route 与 router2. 声明式导航3. 指定组件的呈现位置 四、嵌套路由(多级路由)五、路由重定向1.什么是路由重定向?2.设置 redire…...
网络安全事件分级指南
一、特别重大网络安全事件 符合下列情形之一的,为特别重大网络安全事件: 1.重要网络和信息系统遭受特别严重的系统损失,造成系统大面积瘫痪,丧失业务处理能力。 2.国家秘密信息、重要敏感信息、重要数据丢失或被窃取、篡改、假…...
uniapp组件库SwipeAction 滑动操作 使用方法
目录 #平台差异说明 #基本使用 #修改按钮样式 #点击事件 #API #Props #Event 该组件一般用于左滑唤出操作菜单的场景,用的最多的是左滑删除操作。 注意 如果把该组件通过v-for用于左滑删除的列表,请保证循环的:key是一个唯一值,可以…...
YARN节点故障的容错方案
YARN节点故障的容错方案 1. RM高可用1.1 选主和HA切换逻辑 2. NM高可用2.1 感知NM节点异常2.2 异常NM上的任务处理 4. 疑问和思考4,1 RM感知NM异常需要10min,对于app来说是否太长了? 5. 参考文档 本文主要探讨yarn集群的高可用容错方案和容错能力的探讨。…...
C++后端笔记
C后端笔记 资源整理一、高级语言程序设计1.1 进制1.2 程序结构基本知识1.3 数据类型ASCII码命名规则变量间的赋值浮点型变量的作用字符变量常变量 const运算符 二、高级语言程序设计(荣) 资源整理 C后端开发学习路线及推荐学习时间 C基础知识大全 C那…...
JavaEE中什么是Web容器?
Web容器(也称为Servlet引擎)是一个用于执行Java Servlet和JSP的服务器端环境。它负责管理和执行在其上运行的Web应用程序。 Tomcat是Web容器 Apache Tomcat 是一个流行的开源的Web容器,它实现了Java Servlet和JavaServer Pages(…...
MySQL 8.0 架构 之错误日志文件(Error Log)(1)
文章目录 MySQL 8.0 架构 之错误日志文件(Error Log)(1)MySQL错误日志文件(Error Log)MySQL错误日志在哪里Window环境Linux环境 错误日志相关参数log_error_services 参考 【声明】文章仅供学习交流&#x…...
51单片机实验课一
实验任务一:实现控制8个发光管的亮(灭) #include <REGX52.H> void Delay1ms(unsigned int xms) //11.0592MHz {unsigned char i, j;while(xms){xms--;i 12;j 169;do{while (--j);} while (--i);} } void main() {while(1){P20;//八…...
【.NET Core】多线程之线程池(ThreadPool)详解(一)
【.NET Core】多线程之线程池(ThreadPool)详解(一) 文章目录 【.NET Core】多线程之线程池(ThreadPool)详解(一)一、概述二、线程池的应用范围三、线程池特性3.1 线程池线程中的异常…...
圆的参数方程是如何推导的?
圆的参数方程是如何推导的? 1. 圆的三种参数表示2. 三角函数万能公式3. 回到圆的参数方程1. 圆的三种参数表示 已知圆的第一种参数方程为: x 2 + y 2 = r x^2+y^2=r x2+y2=r 圆的图像如下: 通过上图,不难理解,圆的参数方程还可以用三角函数表示,也就是第二种参数表…...
sqlmap使用教程(2)-连接目标
目录 连接目标 1.1 设置认证信息 1.2 配置代理 1.3 Tor匿名网络 1.4 检测WAF/IPS 1.5 调整连接选项 1.6 处理连接错误 连接目标 场景1:通过代理网络上网,需要进行相应配置才可以成功访问目标主机 场景2:目标网站需要进行身份认证后才…...
c++ http第一个服务
c http第一个服务 一、下载相关依赖:这是一个git开源项目 代码仓地址 二、演示代码,编译参数:g test.cpp -I/**** -lpthread #include <httplib.h> using namespace httplib;void wuhan(const Request &req, Response &res) …...
深入Android S (12.0) 探索Framework之输入子系统InputReader的流程
Framework层之输入系统 第一篇 深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动 第二篇 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程 文章目录 Framework层之输入系统前言一、基础知识1、输入子系统2、INotify 与 Epoll2.1、INotify 机制…...
【cucumber】cluecumber-report-plugin生成测试报告
cluecumber为生成测试报告的第三方插件,可以生成html测报,该测报生成需以本地json测报的生成为基础。 所以需要在测试开始主文件标签CucumberOptions中,写入生成json报告。 2. pom xml文件中加入插件 <!-- 根据 cucumber json文件 美化测…...
华为欧拉操作系统结合内网穿透实现固定公网地址SSH远程连接
文章目录 1. 本地SSH连接测试2. openEuler安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 欧拉操作系统(openEuler, 简称“欧拉”)是面向数字基础设施的操作系统,支持服务器、云计算、边缘openEuler是面向数字基础设施的操作系…...
加速 Selenium 测试执行最佳实践
Selenium测试自动化的主要目的是加快测试过程。在大多数情况下,使用 Selenium 的自动化测试比手动测试执行得特别好。在实际自动化测试实践中,我们有很多方式可以加速Selenium用例的执行。 我们可以选择使用不同类型的等待、不同类型的 Web 定位器、不同…...
c语言野指针
系列文章目录 c语言野指针 c语言野指针 系列文章目录c语言野指针 c语言野指针 野指针可以用于破坏修改别人的内存空间,比如游戏外挂 野指针 野指针:野指针是指向一个未知的内存空间,在读写的时候出现错误。 0-255都是系统保留的 不可以读&am…...
【MySQL】where和having的区别
🍎个人博客:个人主页 🏆个人专栏:数据库 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 用途: 使用位置: 操作对象: 聚合函数: 示例: 结语 我的其他博客 前言 数据库中的 WHERE 和 HAVING 子句在 SQL 查…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
