界面如下:
.pro文件中要加入以下代码
CONFIG += qaxcontainer
.h文件如下
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>#include <QAxWidget>
#include <QAxObject>#define FilePath "C:/temp/" //存放路径namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots://读取按钮点击槽函数void on_btn_read_clicked();//写入按钮点击槽函数void on_btn_write_clicked();//退出按钮点击槽函数void on_btn_exit_clicked();private:Ui::Widget *ui;QAxObject *myword; //Word应用程序指针QAxObject *mydocs; //文档集指针QAxObject *mydoc; //文档指针QAxObject *selection; //Selection指针
};#endif // WIDGET_H
.cpp文件
#include "widget.h"
#include "ui_widget.h"#include <QMessageBox>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}//读取按钮点击槽函数
void Widget::on_btn_read_clicked()
{myword = new QAxObject("Word.Application");mydocs = myword->querySubObject("Documents");if (mydocs == nullptr){QMessageBox::information(this, QString("标题"), QString("获取所有工作文档失败"));return;}QString fileName="test.docx";QString path=QString(FilePath)+fileName;//打开一个Word文档,这里调用的是Documents对象的open方法mydocs->dynamicCall("Open(const QVariant&)",QVariant(path));//获取当前word文档对象mydoc = myword->querySubObject("ActiveDocument");if (mydoc == nullptr){QMessageBox::information(this, QString( "标题"), QString("获取当前文档失败"));return;}//这里是把word文档的内容全部选中。//通过不带参数的range方法选中整个文档内容selection = mydoc->querySubObject("Range()");//然后获取选中的word文档内容QString str = selection->property("Text").toString();//显示到文本框ui->textEdit->setText(str);//关闭文档mydoc->dynamicCall("Close()");delete mydoc;mydoc = NULL;//退出程序myword->dynamicCall("Quit()");delete myword;myword = NULL;
}//写入按钮点击槽函数
void Widget::on_btn_write_clicked()
{//获取文本框内容QString str=ui->textEdit->toPlainText();QString fileName="test.docx";QString path=QString(FilePath)+fileName;//隐式的打开一个word应用程序myword = new QAxObject("Word.Application");myword->setProperty("Visible", false);//获取所有工作文档mydocs = myword->querySubObject("Documents");if (mydocs == nullptr){QMessageBox::information(this, QString("标题"), QString("获取所有工作文档失败"));return;}//创建一个word文档mydocs->dynamicCall("Add (void)");//获取当前激活的文档mydoc = myword->querySubObject("ActiveDocument");if (mydoc == nullptr){QMessageBox::information(this, QString("标题"), QString("获取当前激活文档失败"));return;};//写入文件内容selection = myword->querySubObject("Selection");selection->dynamicCall("TypeText(const QString&)",str);//设置保存QVariant newFileName(path); //存放位置和名称QVariant fileFormat(16); //文件格式 1——doc;16——docxQVariant LockComments(false);//如果为True,则锁定文档以获取注释。默认值为False。QVariant Password(""); //设置打开密码QVariant recent(true);//如果为True,则将文档添加到“文件”菜单上最近使用的文件列表中。默认值为True。QVariant writePassword("");//用于保存文档更改的密码字符串QVariant ReadOnlyRecommended(false);//如果为True,则无论何时打开文档,Word都将处于只读状态。默认值为False。mydoc->querySubObject("SaveAs(const QVariant&, const QVariant&,const QVariant&, const QVariant&, const QVariant&, const QVariant&,const QVariant&)",newFileName, fileFormat, LockComments, Password, recent, writePassword, ReadOnlyRecommended);//关闭文档mydoc->dynamicCall("Close(boolean)", true);delete mydoc;mydoc = NULL;//退出程序myword->dynamicCall("Quit(void)");delete myword;myword = NULL;
}//退出按钮点击槽函数
void Widget::on_btn_exit_clicked()
{close();
}
更多word文件格式参照以下网址
https://docs.microsoft.com/en-us/office/vba/api/word.wdsaveformat
saveas方法介绍参照以下网址
https://docs.microsoft.com/en-us/office/vba/api/word.saveas2