使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鲁教版八年级数学上册-笔记

文章目录 第一章 因式分解1 因式分解2 提公因式法3 公式法 第二章 分式与分式方程1 认识分式2 分式的乘除法3 分式的加减法4 分式方程 第三章 数据的分析1 平均数2 中位数与众数3 从统计图分析数据的集中趋势4 数据的离散程度 第四章 图形的平移与旋转1 图形的平移2 图形的旋转…

解决 @Scope 注解失效问题:深入理解与排查方法

在使用 Spring 框架时&#xff0c;你可能遇到过 Scope 注解失效的情况。这个注解是用来定义 Bean 的作用域的&#xff0c;比如 singleton、prototype、request、session 等。当 Scope 注解失效时&#xff0c;意味着 Bean 的作用域没有被正确地设置&#xff0c;这可能会导致 Bea…

JavaWeb1 Json+BOM+DOM+事件监听

JS对象-Json //Json 字符串转JS对象 var jsObject Json.parse(userStr); //JS对象转JSON字符串 var jsonStr JSON.stringify(jsObject);JS对象-BOM BOM是浏览器对象模型&#xff0c;允许JS与浏览器对话 它包括5个对象&#xff1a;window、document、navigator、screen、hi…

力扣hot100:138. 随机链表的复制(技巧,数据结构)

LeetCode&#xff1a;138. 随机链表的复制 这是一个经典的数据结构题&#xff0c;当做数据结构来学习。 1、哈希映射 需要注意的是&#xff0c;指针也能够当做unordered_map的键值&#xff0c;指针实际上是一个地址值&#xff0c;在unordered_map中&#xff0c;使用指针的实…

VXLAN技术

VXLAN技术 一、VXLAN简介 1、定义 VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff09;&#xff1a;采用MAC in UDP&#xff08;User Datagram Protocol&#xff09;封装方式&#xff0c;是NVO3&#xff08;Network Virtualization over Layer 3&#xff09…

使用 Logback.xml 配置文件输出日志信息

官方链接&#xff1a;Chapter 3: Configurationhttps://logback.qos.ch/manual/configuration.html 配置使用 logback 的方式有很多种&#xff0c;而使用配置文件是较为简单的一种方式&#xff0c;下述就是简单描述一个 logback 配置文件基本的配置项&#xff1a; 由于 logba…

Vuforia AR篇(七)— 二维码识别

目录 前言一、什么是Barcode &#xff1f;二、使用步骤三、点击二维码显示信息四、效果 前言 在数字化时代&#xff0c;条形码和二维码已成为连接现实世界与数字信息的重要桥梁。Vuforia作为领先的AR开发平台&#xff0c;提供了Barcode Scanner功能&#xff0c;使得在Unity中实…

ros常用环境变量

RMW层DDS实现 rti dds export RMW_IMPLEMENTATIONrmw_connextdds //rti dds 或者 RMW_IMPLEMENTATIONrmw_connextdds ros2 run ... export NDDS_QOS_PROFILES/qos.xml //配置qos文件fastdds export RMW_IMPLEMENTATIONrmw_fastrtps_cpp 或者 RMW_IMPLEMENTATIONrmw_fas…

提供全面的网络监控和管理功能,帮助客户实时了解网络状态和优化网络性能

联通IP Transit产品依托中国联通在全球范围内的AS4837/AS10099网络平台&#xff0c;采用BGP对接技术&#xff0c;为客户自有的IP地址段提供全球互联网络穿透服务。通过这一产品&#xff0c;客户可以享受到专属带宽带来的优质访问体验&#xff0c;快速、高效地将网络数据内容接入…

力扣1438.绝对差不超过限制的最长连续子数组

力扣1438.绝对差不超过限制的最长连续子数组 难点&#xff1a;保存数组缩小后的最大最小值 用两个单调队列分别处理最大值和最小值 class Solution {public:int longestSubarray(vector<int>& nums, int limit) {deque<int> quemax,quemin;int n nums.size…

Http和Socks的区别?

HTTP和SOCKS都是用于网络通信的协议&#xff0c;但它们在设计目标和应用场景上有显著的区别。 一、HTTP (HyperText Transfer Protocol) HTTP是用于分布式、协作和超媒体信息系统的应用层协议。主要特点包括&#xff1a; 用途&#xff1a;HTTP主要用于万维网&#xff0c;通过…

json和axion结合

目录 java中使用JSON对象 在pom.xml中导入依赖 使用 public static String toJSONString(Object object)把自定义对象变成JSON对象 json和axios综合案例 使用的过滤器 前端代码 响应和请求都是普通字符串 和 请求时普通字符串&#xff0c;响应是json字符串 响应的数据是…

MySQL换路径(文件夹)

#MySQL作为免费数据库很受欢迎&#xff0c;即使公司没有使用&#xff0c;自己也可以用。它是一个服务&#xff0c;在点击CtrlAltDelete选择任务管理器后&#xff0c;它在服务那个归类里。 经常整理计算机磁盘分类的小伙伴&#xff0c;如果你们安装了MySQL&#xff0c;并且想移…

[Vue3] 滚动条自动滚动到底部

需求 在一个区域会依次打印log&#xff0c;随着log的加长&#xff0c;出现滚动条&#xff0c;而滚动条应该始终保持在最下方。 点击回到顶部按钮&#xff0c;可以使滚动条回到最上方 方案 在滚动区域添加reflog为一个数组&#xff0c;对其添加watch在watch函数中&#xff0c…

actuator/env;.js 漏洞修复

该问题是指Spring Boot Actuator中的一个漏洞&#xff0c;它涉及到暴露了Spring Boot应用的环境信息。Spring Boot Actuator是一个用于监控和管理Spring Boot应用的组件&#xff0c;它提供了多个端点&#xff08;endpoints&#xff09;&#xff0c;如健康检查、度量收集、环境信…

插件:Plugins

一、安装网格插件

重大变化,2024软考!

根据官方发布的2024年度计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试安排&#xff0c;2024年软考上、下半年开考科目有着巨大变化&#xff0c;我为大家整理了相关信息&#xff0c;大家可以看看&#xff01; &#x1f3af;2024年上半年&#xff1a;5月25日&am…

业务安全蓝军测评标准解读—业务安全体系化

目录 1.前言 2.业务蓝军测评标准 2.1 业务安全脆弱性评分(ISVS) 2.2 ISVS评分的参考意义<

高并发短视频系统设计:架构、存储与性能优化全解

1. 系统概况与需求分析 1.1 短视频系统简介 当前短视频行业的快速发展&#xff0c;加上用户对高清、流畅观看体验的需求不断提升&#xff0c;对系统的并发处理能力、视频处理速度、存储效率等多方面都提出了极高的要求。那么&#xff0c;我们首先需要了解一个完整的短视频系统…

msvcp140.dll是什么dll文件?msvcp140.dll文件的丢失要怎么去修复?

msvcp140.dll是什么dll文件&#xff1f;一般会问出这种问题的人&#xff0c;都是遇到了msvcp140.dll丢失的情况了&#xff0c;这时候你的一些程序是打不开的&#xff0c;你需要修复好msvcp140.dll文件才可以正常的打开程序&#xff0c;今天我们就来了解一下msvcp140.dll这文件&…