使用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,一经查实,立即删除!

相关文章

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中实…

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;并且想移…

插件:Plugins

一、安装网格插件

重大变化,2024软考!

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

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

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这文件&…

hcia datacom学习(11):vlan基础配置

1.vlan作用 &#xff08;1&#xff09;限制广播域&#xff1a;广播被限制在vlan内&#xff0c;不会在vlan间转发 &#xff08;2&#xff09;提高安全性&#xff1a;不同vlan的报文在传输时是相互隔离的 &#xff08;3&#xff09;灵活构建&#xff1a;交换机可以把不同终端分…

【实物+仿真设计】基于单片机的物流皮带传输监控系统设计

《基于单片机的物流皮带传输监控系统设计 实物仿真》 整体功能&#xff1a; 本设计采用以单片机为核心控制器&#xff0c;以及传感器检测部分作为输入部分&#xff0c;以报警、显示、洒水、排烟、电机停止模块作为输出部分&#xff0c;构成整个物流皮带传输监控系统。 本设计…

【Linux】信号(一)

信号我们将从信号产生&#xff0c;信号的保存&#xff0c;信号处理分别进行讲解~ 至少大思路是这样。开始之前还要进行一些基础知识的铺垫。 目录 从生活中提炼一些结论&#xff1a;信号概念的一些储备&#xff1a;信号产生&#xff1a;一、kill指令&#xff1a;二、键盘组合键…

win11右键二级菜单恢复成win10一级菜单

winr输入“cmd”回车&#xff0c;打开cmd窗口&#xff0c;输入如下命令&#xff0c;并回车。reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve提示cuccessfully&#xff0c;表示操作成功。重启电脑即可。 如下…

Qt信号槽与函数直接调用性能对比

1. 测试方法 定义一个类Recv&#xff0c;其中包含一个成员变量num和一个成员函数add()&#xff0c;add()实现num的递增。 另一个类Send通过信号槽或直接调用的方法调用Recv的add函数。 单独开一个线程Watcher&#xff0c;每秒计算num变量的增长数值&#xff0c;作为add函数被调…

4.2 索引及其操作

对数据库中的表进行查询操作时有两种搜索扫描方式&#xff0c;一种是全表扫描&#xff0c;另一种就是使用表上建立的索引进行扫描。 全表扫描要查找某个特定的行&#xff0c;必须从头开始一一查看表中的每一行&#xff0c;与查询条件做对比&#xff0c;返回满足条件的记录&…

【AndroidStudio旧版本BUG问题】完美解决运行报错问题Invalid keystore format

由于之前安装的版本导致AndroidStudio 运行报错&#xff1a;Invalid keystore format 在如下截图的路径中删了debug.keystore重新打开Android Studio运行一下就好了&#xff01;&#xff01;&#xff01; 下面介绍各个模块功能&#xff1a; adbkey 是 Android Debug Bridge (AD…

如何处理SSL证书过期问题?

SSL证书是网络安全的重要组成部分&#xff0c;它为网站提供了数据加密、身份验证和增强用户信任等多重保护。然而&#xff0c;SSL证书并非永久有效&#xff0c;其有效期通常为一年。当SSL证书过期时&#xff0c;网站安全性会受到影响&#xff0c;甚至可能面临安全风险。本文旨在…

《2024年网络安全预测:未来规划深度洞察》

2024 年打击网络对手的计划。 阅读报告&#xff0c;了解我们的专家对 2024 年网络安全行业的预测&#xff0c;包括&#xff1a; 攻击者将人工智能融入其行动中&#xff0c;防御者利用它来加强检测和响应 民族国家继续开展网络行动以实现其地缘政治目标 攻击者继续利用零日漏洞…