【QT】word文档操作实例 您所在的位置:网站首页 word文档的界面 【QT】word文档操作实例

【QT】word文档操作实例

2024-01-23 15:22| 来源: 网络整理| 查看: 265

文章目录 引言一、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格式

在这里插入图片描述 在这里插入图片描述

二、WordDemo实现

代码中都有详尽的注释

1、mainwindow.ui

在这里插入图片描述

在这里插入图片描述

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(); } 三、实现效果

修改数据

在这里插入图片描述

点击生成

在这里插入图片描述

点击保存

在这里插入图片描述

点击Yes

在这里插入图片描述

完成效果

在这里插入图片描述    

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有