首页 > 其他分享 >使用Qt对word文档进行读写

使用Qt对word文档进行读写

时间:2024-06-02 15:01:16浏览次数:23  
标签:std const Qt 表格 读写 param return word

目录

开发环境

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

标签:std,const,Qt,表格,读写,param,return,word
From: https://blog.csdn.net/m0_51415606/article/details/139391389

相关文章

  • Qt for Android 轻松解决编译器无法被识别问题!!
        相信很多小伙伴,也碰到过这种问题。明明下载Qt时,勾选了安卓组件,JDK,NDK、SDK都配置成功,但还是没有安卓编译器,或者是编译器前面有黄色感叹号,无法使用编译器。下面有解决办法。    解决方法:        1、Qt缓存导致(解决大部分问题):        ......
  • Redis数据存储和读写
    今天工作群里,有小伙伴问了一个问题,从Redis获取的数据,一会是0,一会是OK。这引起了我们对Redis数据存储和读写的疑问。以下是整理的一些技术研究内容。在Redis中,所有的数据存储都是基于字符串的。无论你插入的是String、int还是DateTime类型的数据,最终都会以字符串的形式存......
  • QT开发和MFC开发的经典案例
    QT========================3DSlicer,afreeopensourcesoftwareforvisualizationandmedicalimagecomputingAcetoneISO:镜像文件挂载软件AdobePhotoshopAlbum,一个图像组织应用程序[35]Arora:一款跨平台的开源网页浏览器AutodeskMotionBuilder,三维角色动画软件Autod......
  • pdf转word/text后换行问题
    pdf转word/text后换行问题pdf转为word/text,或者从pdf复制一段文字,这段文字有很多换行(其实就相当于一行一段):野史里说,楚汉争霸时期,高祖刘邦大败。薄氏还是个姑娘的时候叫薄姬,逃难的时候占领了一个无人居住的民宅。忽然有一天看见一个浑身是血,穿着盔甲拿着兵器的男人闯进了自......
  • 宝塔搭建wordexpress及WP搬家教程
     一、安装宝塔 yuminstall-ywget&&wget-Oinstall.shhttps://download.bt.cn/install/install_6.0.sh&&shinstall.shed8484bec 面板安装成功后,通过bt命令修改面板安全入口、用户名、密码。 云主机放行面板端口 登录bt面板,极速安装LNMP   ......
  • (11.1)iic串口读写EEPROM实验:EEPROM介绍
    一、EEPROM简介EEPROM(ElectricallyErasableProgrammableReadOnlyMemory),带电可擦除可编程只读存储器,是一种掉电后数据不丢失的非易失性存储器,用户可以通过高于普通电压的作用来擦除和编程(重写)非易失性存储器主要包括:EEPROM:以字节为单位改写;结构复杂,成本高;存储......
  • Linux线程之读写锁小结
    读写锁(rwlock)与互斥锁(MutexLock)相比,有如下特点:更加细致的区分了读和写,给共享资源分别上了“读”锁和“写”锁。“写”独占,“读”共享,“写”锁优先级更高如果共享资源在绝大多数情况下是“读”操作,可以提高程序的并发性能。常用的函数原型总结如下:pthread_rwlock_trwlock......
  • QT通过qss/css修改单一控件样式
    通过.ui文件创建的界面,控件的QObjectName会自动添加,如果是通过.cpp和.h文件创建的控件需要加这句话open_dir_btn->setObjectName("open_dir_btn");,为按钮open_dir_btn添加设置ID。QTCreator设计模式中添加了一个按钮,它的objectName是自动添加的:只修改单个按钮的样式:QPushButt......
  • QT添加样式表QSS/CSS文件后不起作用
    .qss和.css文件类似,CSS即层叠样式表(CascadingStyleSheets)可以修改组件的样式。在QT项目需要.css文件对组件进行样式设置,在qrc文件夹下添加文件之后,读取会失败,原因是添加文件需要点击添加现有文件,尽管所需文件在某个目录下,也不要选择添加目录。分别使用绝对路径、相对路径添......
  • sensitive-word 敏感词 v0.16.1 新特性支持字典内存资源释放
    敏感词系列sensitive-word-admin敏感词控台v1.2.0版本开源sensitive-word-adminv1.3.0发布如何支持分布式部署?01-开源敏感词工具入门使用02-如何实现一个敏感词工具?违禁词实现思路梳理03-敏感词之StopWord停止词优化与特殊符号04-敏感词之字典瘦身05-敏感词之DFA......