文章目录

  • 引言
  • 一、word模板准备
  • 二、WordDemo实现
    • 1、mainwindow.ui
    • 2、mainwindow.h
    • 3、mainwindow.cpp
  • 三、实现效果

引言

在QT5.3中,在.pro使用的是:QT += widgets gui axcontainer 来使用ActiveQt框架中的QAxContainer模块(Qt4版本添加Qt += qaxcontainer)=),所以在项目在头文件中包含QAxWidget和QAxObject。

简单介绍ActiveQt框架由两个模块组成:
QAxContainer模块允许我们使用COM对象并且可以在Qt应用程序中嵌入QActive控件。
QAxServer模块允许我们导出使用Qt编写的自定义的COM对象和Active控件。

一、word模板准备

模板的准备至关重要,而其中更重要的是模板中书签的设置命名,因为接下来的程序代码中,程序就是根据书签的名字,来定位word文档中的位置,从而进行数据的插入修改

当设计好表格,并且设计好书签的名称,便将文档保存为 .dot格式


二、WordDemo实现

代码中都有详尽的注释

1、mainwindow.ui

2、mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void init_UI();        //初始化界面函数void clear_UI();   //重置界面函数private slots:void reshow();            //重置界面的槽函数void create_word();       //创建报表的槽函数private:Ui::MainWindow *ui;};
#endif // MAINWINDOW_H

3、mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAxObject>
#include <QAxWidget>
#include <QMessageBox>
#include <QFileDialog>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);init_UI();connect(ui->btu_create,SIGNAL(clicked(bool)),this,SLOT(create_word()));connect(ui->btu_create,SIGNAL(clicked(bool)), this, SLOT(reshow()));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::create_word()
{//新建一个word应用程序QAxWidget *word = new QAxWidget("Word.Application",0,Qt::MSWindowsOwnDC);//并设置为不可见word->setProperty("Visible",false);//获取所有的工作文档QAxObject *documents = word->querySubObject("Documents");//以test2.dot为模板新建一个文档documents->dynamicCall("Add(QString)",QString::fromLocal8Bit("E:/MyQtWorkSpace/Word/test2.dot"));//获取当前激活的文档QAxObject *document = word->querySubObject("ActiveDocument");//获取文档中名字为equ的标签QAxObject *bookmark_equ = document->querySubObject("Bookmarks(QVariant)","equ");//选中标签,将字符textg插入到标签位置if(!bookmark_equ->isNull()){QString sText=ui->lineEdit_equ->text();                          //此处为替换内容qDebug()<<sText;bookmark_equ->dynamicCall("Select(void)");                             //选中要选中的区域bookmark_equ->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作}//获取文档中名字为temp的标签QAxObject *bookmark_temp = document->querySubObject("Bookmarks(QVariant)","temp");//选中标签,将字符textg插入到标签位置if(!bookmark_equ->isNull()){QString pText=ui->lineEdit_temp->text();                          //此处为替换内容bookmark_temp->dynamicCall("Select(void)");                             //选中要选中的区域bookmark_temp->querySubObject("Range")->setProperty("Text",pText);      //进行替换操作}//获取文档中名字为bas的标签QAxObject *bookmark_bas = document->querySubObject("Bookmarks(QVariant)","bas");//选中标签,将字符textg插入到标签位置if(!bookmark_equ->isNull()){QString bText=ui->lineEdit_bas->text();                                 //此处为替换内容bookmark_bas->dynamicCall("Select(void)");                             //选中要选中的区域bookmark_bas->querySubObject("Range")->setProperty("Text",bText);      //进行替换操作}qDebug()<<"方法";//修改word中的表格QString sheethead = "序号";for(int j=1;j<=4;j++){QString addrowhead=QString("%1").arg(j);QString sheetheadnumber = QString("%1%2").arg(sheethead).arg(addrowhead);qDebug()<<sheetheadnumber;QAxObject *sheethead = document->querySubObject("Bookmarks(QVariant)",sheetheadnumber);QString sheettexthead=ui->tableWidget->item(j-1,0)->text();                             //此处为替换内容sheethead->dynamicCall("Select(void)");                                                 //选中要选中的区域sheethead->querySubObject("Range")->setProperty("Text",sheettexthead);                  //进行替换操作}QString sheetfrist = "数据";for(int i=1;i<=4;i++){for(int j=1;j<5;j++){QString addrow=QString("%1").arg(i);QString addcolum=QString("%1").arg(j);QString sheetlabel = QString("%1%2%3").arg(sheetfrist).arg(addrow).arg(addcolum);qDebug()<<sheetlabel;QAxObject *sheetdata = document->querySubObject("Bookmarks(QString)",sheetlabel);QString sheettext=ui->tableWidget->item(i-1,j)->text();                     //此处为替换内容,必须要加入.text().这样返回值才会正确sheetdata->dynamicCall("Select(void)");                                     //选中要选中的区域sheetdata->querySubObject("Range")->setProperty("Text",sheettext);          //进行替换操作}}//将文件保存为doc,同样可以生成docx文档QString pathsave = QFileDialog::getSaveFileName(this,"Save","../","word(*doc)");if(pathsave.isEmpty()==true){return;}document->dynamicCall("SaveAs(const QString&))",QDir::toNativeSeparators(pathsave));document->dynamicCall("Close (boolean)",false);word->dynamicCall("Quit()");QMessageBox::warning(this,"完成","文件已经保存",QMessageBox::Yes);}void MainWindow::init_UI()
{int col = 5;int row = 4;ui->tableWidget->setColumnCount(col);ui->tableWidget->setRowCount(row);QStringList header; //表头写入表格header <<QString::fromUtf8("序号")<<QString::fromUtf8("测试数据1")<<QString::fromUtf8("测试数据2")<<QString::fromUtf8("测试数据3")<<QString::fromUtf8("测试数据4");ui->tableWidget->setHorizontalHeaderLabels(header);ui->tableWidget->horizontalHeader()->setStretchLastSection(true);   //自动调整宽度ui->tableWidget->verticalHeader()->hide();QString num[4]={"1","2","3","4"};for(int i=0;i<row;i++)  //序号填充{ui->tableWidget->setItem(i,0,new QTableWidgetItem(num[i]));}QString data[4][4]={{"5","7","8","6"},{"4","6","5","9"},{"7","5","5","6"},{"8","3","4","6"}};for(int i=0;i<4;i++)    //随机数据填充{for(int j=1;j<5;j++){ui->tableWidget->setItem(i,j,new QTableWidgetItem(data[i][j]));}}
}void MainWindow::clear_UI()
{ui->lineEdit_bas->clear();ui->lineEdit_equ->clear();ui->lineEdit_temp->clear();
}void MainWindow::reshow()
{clear_UI();this->show();
}

三、实现效果

修改数据

点击生成

点击保存

点击Yes

完成效果

如有不足之处,还望指正 1


  1. 如果对您有帮助可以点赞、收藏、关注,将会是我最大的动力 ↩︎

【QT】word文档操作实例——根据word模板生成word报表相关推荐

  1. 将mysql 导出word文档_将数据库的内容生成WORD文档

    毕业设计需要从库里取纪录生成word文档,我找了半天,主要有这么几种方法: 1.改头,就是象excel似的Response.Buffer = TRUE Response.ContentType = & ...

  2. Qt对word文档操作总结

    Qt对word文档操作总结 近期在使用Qt对word进行读写操作时候遇到很多问题,对于Qt内部没有很好的库函数可以使用.office官网上的文档只有VBA的示例,没有Qt的语法例子.在这里作者介绍了一 ...

  3. C++实例(十)Word文档操作

    Word文档操作 一.Word文档的基本操作 打开Word文档 在开发应用程序时,有时需要调用Word文档,如果让用户在磁盘中寻找文档将会很麻烦. 读取Word文档文本内容 在使用程序控制Word文档 ...

  4. Python3-word文档操作(八):提取word文档中的图片方式一-利用docx库

    1. 简介: 要获取word文档中的图片文件.思路就是先解压,再查找.python中,下面两个库都可以实现这个功能: (1)zip库 (2)docx库 zip库: 上一篇博文已经提过,word本质上也 ...

  5. web系统中巧用word文档的html格式创建多样式的word文档,WEB系统中巧用WORD文档的HTML格式创建多样式的WORD文档...

    以计算机和现代网络技术为特征的现代信息技术极大地促进了社会经济的发展,基于各行各业的WEB系统的开发与应用也越来越多. >> WEB系统中巧用WORD文档的HTML格式创建多样式的WORD ...

  6. word文档docx密码忘了怎么办,word文档docx权限限制怎么办?

    word文档docx移除编辑密码,word文档docx权限限制如何解除?[解密神器]word文档docx权限密码解密,用「密码帝」啊 超级好用!,百度搜索密码帝就可以了,非常简单手机电脑都可以用,一键 ...

  7. java根据html生成word文档,Java之HTML富文本导出WORD(不含图片)

    一.需求: 我们在使用富文本编辑器来编辑文本的时候,文本会自带HTML的标签比如 等来修饰字体样式. 比如ueditor.kindeditor等富文本编辑器. 那么,我们如何将富文本编辑器里的内容导出 ...

  8. 教程 | Python 实现 Word 文档操作...

    本文由P"ython中文社区"编辑 本文主要讲解Python中操作word的思路. 一.Hello,world! 使用win32com需要安装pypiwin32 pip insta ...

  9. Python3-word文档操作(九):给word文档添加/删除一张图片-利用docx库

    1 简介: 在前面几篇博文中已经展示了python的docx库的相关用法,本篇继续学习docx的相关内容. docx库不仅可以提取word文档中的图片,也可以给文档添加/删除图片.本篇介绍如何添加/删 ...

最新文章

  1. 简单的视频采集demo
  2. pytorch 多进程读写同一个文件
  3. 吉大c 语言程序设计奥鹏作业,吉大19秋学期《C语言程序设计》在线作业一【满分答案】...
  4. sublime快捷键整理
  5. 全球及中国吉他霉素预混剂行业创新现状与可持续发展分析报告2022-2027年版
  6. 179一个错误的认识
  7. datagrid设置单元格边框_更改 DataGridView 控件中的边框和网格线样式 - Windows Forms .NET Framework | Microsoft Docs...
  8. 成大事必备9种能力.9种手段.9种心态
  9. 从《华为的冬天》到AI的冬天 | 甲子光年
  10. 苏宁小店上线咖啡业务,成为国内O2O社区便利店的创领者!
  11. 警告: A docBase inside the host appBase has been specified, and will be ignore2
  12. 瑞典皇家理工学院计算机学什么,瑞典留学 皇家理工学院的学科设置
  13. 8.19华为笔试题目c++
  14. 2020行业进阶趋势:传统IT式微已显而易见
  15. 大数据之数据倾斜剖析
  16. Ansible学习笔记——vault加密
  17. c语言fp函数,FP_INFINITE
  18. ztlpri.dll,SysWin64.Sys,wgdpri.dll等病毒手动解决
  19. L7和mapbox结合使用的案例2
  20. centos7编译安装mysql5.7

热门文章

  1. 【说啥都队-喻诗媛个人总结】
  2. Nginx入门及笔记
  3. 初级网络基础知识整理
  4. linux iscsi 虚拟化,使用 iSNS 在 RHEL6 中简化 Linux iSCSI 管理
  5. 奔驰商务租车|奔驰V260商务车
  6. 利用VC++UDFStudio插件编译和使用真实气体模型(UDRGM)及踩过的大坑
  7. [LOJ2325][清华集训 2017]小Y和恐怖的奴隶主 矩阵乘法+奇技淫巧
  8. 写一个python的程序帮我切割图片集中的花朵,利用边缘分割算法
  9. OpenGL-案例-矩阵压栈绘制
  10. 随笔~游戏工作室的招聘