当前位置: 首页 > news >正文

使用Qt对word文档进行读写

目录

  • 开发环境
  • 原理
  • 使用的QT库
  • 搭建开发环境
  • 准备word模板
  • 测试用例
  • 结果
  • Gitee地址

开发环境

vs2022 + Qt 5.9.1 + msvc2017_x64,在文章最后提供了源码。

原理

Qt对于word文档的操作都是在书签位置进行插入文本、图片或表格的操作。

使用的QT库

除了基本的gui、core、widget库外,还需要ActiveQt库。

Qt5AxBased.lib,Qt5AxContainerd.lib

搭建开发环境

我是在vs2022上进行开发,换成qt creator同理。

右键属性选择-》Qt projecting-》勾选这几个

在这里插入图片描述
链接器-》常规-》输入

在这里插入图片描述

Qt5AxBased.lib
Qt5AxContainerd.lib
Qt5Widgetsd.lib
Qt5Guid.lib

准备word模板

在这里插入图片描述
在想要插入的地方设置书签

// 接口文件
#pragma once#include <iostream>class IQtWordProject
{public:virtual ~IQtWordProject() {}/** @brief 根据word模板创建报告,后缀是.dot* @param _templatePat 模板路径(绝对路径)* @return true表示成功, false表示失败*/virtual bool WordApplication(const std::string& _templatePath) = 0;/** @brief 根据wps模板创建报告,后缀是.wpt* @param _templatePath 模板路径(绝对路径)* @return true表示成功,false表示失败*/virtual bool WpsApplication(const std::string& _templatePath) = 0;/** @brief 设置生成报告时报告是否可见,默认不可见* @param _visible true表示可见,false表示不可见* @return 无。*/virtual void SetVisible(const bool& _visible = false) = 0;/** @brief 往指定书签插入文本内容* @param _mark 书签名* @param _content 内容* @return 成功返回true,失败返回false*/virtual bool SetMarkContent(const std::string& _mark, const std::string _content) = 0;/** @brief 往指定书签插入图片* @param _mark 书签名* @param _pngPath 图片路径(绝对路径)* @return 成功返回true,失败返回false*/virtual bool SetMarkPicture(const std::string& _mark, const std::string& _pngPath) = 0;/** @brief 往指定书签创建表格* @param _mark 书签名* @param _row 创建的表格行数* @param _col 创建的表格列数* @param _tableTitle 表格标题* @return 成功返回true 失败返回false*/virtual bool SetMarkTable(const std::string& _mark, const int& _row, const int& _col, const std::string& _tableTitle) = 0;/** @brief 指定表格插入行* @param _tableNum 指定表格是第几个(从1开始)* @param _startRow 插入的起始行* @param _rows 插入的行数* @return 成功返回true 失败返回false*/virtual bool InsertTableRows(const int& _tableNum, const int& _startRow, const int& _rows) = 0;/** @brief 指定表格删除行* @param _tableNum 指定表格是第几个(从1开始)* @param _row 删除的行号(从1开始)* @return 成功返回true 失败返回false*/virtual bool DeleteTableRow(const int& _tableNum, const int& _row) = 0;/** @brief 刷新表格内容* @param _tableNum 指定表格是第几个(从1开始)* @param _tableContent 表格内容* @return 成功返回true 失败返回false*/virtual bool UpdateTableData(const int& _tableNum, const std::vector<std::string>& _tableContent) = 0;/** @brief 保存文件并退出* @param _docPath 保存的文件路径+文件名,支持doc、docx* @return 无*/virtual void SaveFileQuit(const std::string& _docPath) = 0;
};

测试用例

测试用例实现了插入文本、插入图片、对表格进行插入行、创建表格、给表格添加内容的功能。

// main.cpp#include "QtWordProject.h"#include <QtWidgets/QApplication>
#include <QString>
#include <QVariantList>
#include <qdebug.h>
#include <memory>int main(int argc, char *argv[])
{QApplication a(argc, argv);std::shared_ptr<IQtWordProject> word = std::make_shared<QtWordProject>();// 替换为你的模板路径QString templatePath = QApplication::applicationDirPath() + "/../../template.doc";word->WordApplication(QString2StdString(templatePath));// 向指定标签插入文本内容word->SetMarkContent("Customer_Name", "CJX");word->SetMarkContent("Name", "语文");word->SetMarkContent("Number", "100");// 替换为你的图片路径QString imagePath = QApplication::applicationDirPath() + "/../../1.png"; word->SetMarkPicture("picture", QString2StdString(imagePath));// 创建表格word->SetMarkTable("table", 3, 3, "Table Test");// 给第一个表格插入行word->InsertTableRows(1, 2, 2);// 第二个表格删除一行word->DeleteTableRow(2, 1);// 给第二个表格刷新内容std::vector<std::string> tableContent = { "1","2","3","4","5","6"};word->UpdateTableData(2, tableContent);// 保存文件//将文件保存为doc,同样可以生成docx文档QString pathsave = QApplication::applicationDirPath() + "/../../result.doc";word->SaveFileQuit(QString2StdString(pathsave));// 这个widget显示出来说明整个文档已经保存下来了QWidget* widget = new QWidget;widget->show();return a.exec();
}

结果

在这里插入图片描述
在这里插入图片描述

Gitee地址

https://gitee.com/hnSVN/QtWordEditor

相关文章:

使用Qt对word文档进行读写

目录 开发环境原理使用的QT库搭建开发环境准备word模板测试用例结果Gitee地址 开发环境 vs2022 Qt 5.9.1 msvc2017_x64&#xff0c;在文章最后提供了源码。 原理 Qt对于word文档的操作都是在书签位置进行插入文本、图片或表格的操作。 使用的QT库 除了基本的gui、core、…...

docker容器内无法使用命令问题

更换国内源 /etc/apt/source.list 可以先apt-get install vim #进入容器 docker exec -it 容器ID /bin/bashmv /etc/apt/source.list /etc/apt/source.list.bd vim /etc/apt/source.list#此处我使用腾讯云的源 deb http://mirrors.cloud.tencent.com/debian/ buster main non…...

【深度学习】安全帽检测,目标检测,Faster RCNN训练

文章目录 资料环境尝试训练安全帽数据训练测试预测全部数据、代码、训练完的权重等资料见&#xff1a; 资料 依据这个进行训练&#xff1a; https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_object_detection/faster_rcnn ├── bac…...

IDEA2024创建maven项目

1、new->project 2、创建后展示 3、生成resources文件夹 4、测试--编写一个hello文件...

linux上VirtualBox使用

前言 最近想把唯一的windows系统装成linux&#xff0c; 但是确实存在一些特殊软件无法舍弃&#xff0c;所有装完linux需要用虚拟机装个windows 上来使用特定的一些软件&#xff08;不想用wine了&#xff09;。 还有对一些特定usb设备的透传&#xff0c;这样才能保证在虚拟机中…...

PID控制算法介绍及使用举例

PID 控制算法是一种常用的反馈控制算法&#xff0c;用于控制系统的稳定性和精度。PID 分别代表比例&#xff08;Proportional&#xff09;、积分&#xff08;Integral&#xff09;和微分&#xff08;Derivative&#xff09;&#xff0c;通过组合这三个部分来调节控制输出&#…...

因子区间[牛客周赛44]

思路分析: 我们可以发现125是因子个数的极限了,所以我们可以用二维数组来维护第几个数有几个因子,然后用前缀和算出来每个区间合法个数,通过一个排列和从num里面选2个 ,c num 2 来计算即可 #include<iostream> #include<cstring> #include<string> #include…...

代码随想录算法训练营第四十四天 | 01背包问题理论基础、01背包问题滚动数组、416. 分割等和子集

背包问题其实有很多种&#xff0c;01背包是最基础也是最经典的&#xff0c;软工计科学生一定要掌握的。 01背包问题 代码随想录 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经…...

【PingPong_注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …...

车辆路径规划之Dubins曲线与RS曲线简述

描述 Dubins和RS曲线都是路径规划的经典算法&#xff0c;其中车辆运动学利用RS曲线居多&#xff0c;因此简单介绍Dubins并引出RS曲线。 花了点时间看了二者的论文&#xff0c;并阅读了一个开源的代码。 Dubins曲线 Dubins曲线是在满足曲率约束和规定的始端和末端的切线&#…...

PostgreSQL 和Oracle锁机制对比

PostgreSQL 和Oracle锁机制对比 PostgreSQL 和 Oracle 都是业界广泛使用的关系型数据库管理系统&#xff0c;它们在锁机制方面都有独到的设计来控制并发访问&#xff0c;确保数据的一致性和完整性。下面我们详细比较一下这两个数据库系统的锁机制。 1. 锁类型 PostgreSQL P…...

6月05日,每日信息差

第一、特斯拉在碳博会上展示了其全品类的可持续能源解决方案&#xff0c;包括首次在国内展出的超大型电化学商用储能系统 Megapack 和家庭储能系统 Powerwall。此外&#xff0c;特斯拉还展示了电动汽车三电系统的解构和电池回收技术产品 第二、2024 年第一季度&#xff0c;全球…...

MongoDB~俩大特点管道聚合和数据压缩(snappy)

场景 在MySQL中&#xff0c;通常会涉及多个表的一些操作&#xff0c;MongoDB也类似&#xff0c;有时需要将多个文档甚至是多个集合汇总到一起计算分析&#xff08;比如求和、取最大值&#xff09;并返回计算后的结果&#xff0c;这个过程被称为 聚合操作 。 根据官方文档介绍&…...

HTML+CSS+JS 动态登录表单

效果演示 实现了一个登录表单的背景动画效果,包括一个渐变背景、一个输入框和一个登录按钮。背景动画由多个不同大小和颜色的正方形组成,它们在页面上以不同的速度和方向移动。当用户成功登录后,标题会向上移动,表单会消失。 Code <!DOCTYPE html> <html lang=&q…...

统一返回响应

前言 我们为什么要设置统一返回响应 提高代码的可维护性&#xff1a;通过统一返回请求的格式&#xff0c;可以使代码更加清晰和易于维护&#xff0c;减少重复的代码&#xff0c;提高代码质量。 便于调试和测试&#xff1a;统一的返回格式使得在调试和测试时更为简单&#xff…...

大数据学习问题记录

问题记录 node1突然无法连接finalshell node1突然无法连接finalshell 今天我打开虚拟机和finalshell的时候&#xff0c;发现我的node1连接不上finalshell,但是node2、node3依旧可以链接&#xff0c;我在网上找了很多方法&#xff0c;但是是关于全部虚拟机连接不上finalshell&a…...

第N4周:中文文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、预备知识 中文文本分类和英文文本分类都是文本分类&#xff0c;为什么要单独拎出来个中文文本分类呢&#xff1f; 在自然语言处理&#xff08;NLP&#x…...

【kubernetes】探索k8s集群的pod控制器详解(Deployment、StatefulSet、DaemonSet、Job、CronJob)

目录 一、Pod控制器及其功用 二、pod控制器有多种类型 2.1ReplicaSet 2.1.1ReplicaSet主要三个组件组成 2.2Deployment 2.3DaemonSet 2.4StatefulSet 2.5Job 2.6Cronjob 三、Pod与控制器之间的关系 3.1Deployment 3.2SatefulSet 3.2.1StatefulSet三个组件 3.2.2为…...

直接插入排序

#include <stdio.h>void insert_sort(int arr[], int n) {int i;int j;int tmp;for (i 1; i < n; i){tmp arr[i];j i - 1;// 将要插入的元素与数组中的元素比较&#xff08;从后向前比&#xff09; while (j > 0 && arr[j] > tmp){arr[j 1] arr[…...

esp32s3 nvs 存储过程中使用malloc和free函数的一点困惑

我的项目中&#xff0c;大量使用了malloc()和free()函数&#xff0c;在使用nvs存储之前没有出现问题。 esp32厂家nvs的blob存储的例程中&#xff0c;有使用malloc()和free()&#xff0c;我参照例程写了自己的blob存储函数f&#xff0c;一开始是可以正常使用的&#xff0c;后来…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...