文章目录
引言一、word模板准备二、WordDemo实现1、mainwindow.ui2、mainwindow.h3、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格式
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200706153358662.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvdXRDb2Rlcw==,size_16,color_FFFFFF,t_70)
二、WordDemo实现
代码中都有详尽的注释
1、mainwindow.ui
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200706150308763.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvdXRDb2Rlcw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200706150344224.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvdXRDb2Rlcw==,size_16,color_FFFFFF,t_70)
2、mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
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
#include
#include
#include
#include
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()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()
for(int j=1;j
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
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
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();
}
三、实现效果
修改数据
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200726123455394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvdXRDb2Rlcw==,size_16,color_FFFFFF,t_70)
点击生成
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200726123524858.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvdXRDb2Rlcw==,size_16,color_FFFFFF,t_70)
点击保存
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200726123549460.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvdXRDb2Rlcw==,size_16,color_FFFFFF,t_70)
点击Yes
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200726123606323.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvdXRDb2Rlcw==,size_16,color_FFFFFF,t_70)
完成效果
如有不足之处,还望指正 1。
如果对您有帮助可以点赞、收藏、关注,将会是我最大的动力 ↩︎
|