QT C++ 基于word模板 在书签位置写入文字和图片

如果你有按模版批量自动化操作word文件的需求,那么本文能给你一定的帮助。

它能满足你程序自动化生成报表的需求。常常用于上位机、测试仪器的软件中。

需要你你自己做个word模版文档,添加2个书签。点按钮,会按照你的模板文档生成一个同样的文档,在书签的位置添加(替换)文字和图片,从而实现自动批量化操作。

QT6.2.4 MSVC2019 调试通过。

在文章的最后列出了代码下载链接。

但是从打开文件到写完文件,需要6秒左右时间,哪位有好的方案可以缩短时间。

//1.界面

//界面很简单,就一个写操作的按钮。

//2.头文件

//--------------------------------------------------------------------------------------------------------------

#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>

#include <ActiveQt/QAxObject>
#include <ActiveQt/QAxWidget>

#include "CWordOperation.h"

QT_BEGIN_NAMESPACE

namespace Ui {

class Widget;

}

QT_END_NAMESPACE

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = nullptr);

~Widget();

void initUI();
QPushButton* btn_write ;

private:

Ui::Widget *ui;

CWordOperation opt;

private slots:

void btn_write_click();

};

#endif // WIDGET_H

//----------------------------------------------------------------------------------------------------------------

//3.cpp文件

#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

initUI();

}

void Widget::initUI()

{

QVBoxLayout* vlayout = new QVBoxLayout();

btn_write = new QPushButton(this);

btn_write->setText("写入word文档");

btn_write->setFixedWidth(100);

vlayout->addWidget(btn_write);

setLayout(vlayout);

QObject::connect(btn_write, &QPushButton::clicked,this,&Widget::btn_write_click);

}

void Widget::btn_write_click()

{

//qDebug()<<"void Widget::btn_write_click()";

opt.openFile("d:/word5.docx", false);

// 添加文字

opt.appendBookMarksText("bookmark1", "Lei_Jun");//书签位置替换文字

// 添加图片

//String tempFilePath = "d:/output/LeiJun.png";//labview.jpeg

QString tempFilePath = "d:/output/labview.jpeg";//labview.jpeg

opt.replaceBookmarkWithImage("bookmark2", tempFilePath);//书签位置替换图片

opt.saveAs(u8"d:/output/output.docx");

opt.closeFalse();

}

Widget::~Widget()

{

delete ui;

}

//---------------------------------------------------------------------------------------------------------------------

//4.CWordOperation类

//写文字的函数原型:

//bool CWordOperation::appendBookMarksText(const QString & strBookmark, const QString & strText)

//写图片的函数原型:

bool CWordOperation::appendBookMarksText(const QString & strBookmark, const QString & strText)

//下载链接

https://download.csdn.net/download/weixin_39926429/89377300

//5.参考代码下载链接

https://download.csdn.net/download/weixin_39926429/89377344

//6.word添加书签的方法

图1-添加书签示意图

分5步:

第1步:光标移动到合适的位置

第2步:点菜单的"插入"

第3步:点菜单的书签,弹出一个框

第4步:对话框的最上面的文本框内输入"书签名",我输入的是bookmark1

第5步:点添加按钮,对话框关闭,添加了书签。

完了保存和关闭文档。就已经生成了模版。

说明:可以看到我添加了2个书签,"bookmark1"、"bookmark2"

它是个字符串

word模板文件下载链接

https://download.csdn.net/download/weixin_39926429/89377592

相关推荐
Z1Jxxx1 天前
0和1的个数
数据结构·c++·算法
源代码•宸1 天前
Leetcode—1266. 访问所有点的最小时间【简单】
开发语言·后端·算法·leetcode·职场和发展·golang
遇见~未来1 天前
JavaScript数组全解析:从本质到高级技巧
开发语言·前端·javascript
南屿欣风1 天前
Sentinel 熔断规则 - 异常比例(order & product 示例)笔记
java·开发语言
u0104058361 天前
使用Java实现高性能的异步编程:CompletableFuture与Reactive Streams
java·开发语言
朔北之忘 Clancy1 天前
2020 年 6 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·尺取法
消失的旧时光-19431 天前
C++ 中的 auto 与 nullptr:不是语法糖,而是类型系统升级
开发语言·c++
专注VB编程开发20年1 天前
c#Type数组转成字符串的名称
java·开发语言
fpcc1 天前
跟我学C++中级篇—C++17中的元编程逻辑操作
c++·模板编程
HABuo1 天前
【Linux进程(五)】进程地址空间深入剖析-->虚拟地址、物理地址、逻辑地址的区分
linux·运维·服务器·c语言·c++·后端·centos