界面如下:
.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_OBJECT
public:
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——docx
QVariant 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
版权声明:本文为WMT1520原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。