使用场景:
1.有固定的word模板,需要往里填入不同信息时。
2.word模板中需要插入图片。
3.word模板中有不确定行数的表格需要填写。
原始方法:
一、用word打开文档,在需要填写信息的空格处插入书签。
二、将文档另存为dot格式。
操作word类:
h
#ifndef MYWORD_H
#define MYWORD_H
/********************************************
*提供一个操作word的类
*该类具有以下功能:
*1.指定标签插入文字
*
*********************************************/
#include <QObject>
#include <QAxObject>
#include <QAxWidget>
class MyWord : public QObject
{
Q_OBJECT
public:
explicit MyWord(QObject *parent = 0);
private:
QString m_fileName;//存入位置
QAxWidget *m_pWord;
QAxObject *m_pDocuments;
QAxObject *m_pDocument;//
public:
void createWordDocument();//创建word文档
bool insertText(QString Tag, QString text);//往标签处插入文字,tag书签名称,text插入的文字
bool insertPic(QString Tag,QString Picpath);//往标签处插图片
void saveAndQuit(const QString &text);//保存文档并退出
signals:
public slots:
};
#endif // MYWORD_H
cpp
#include "myword.h"
#include <QFileDialog>
#include <QDebug>
#include <QProcess>
MyWord::MyWord(QObject *parent) : QObject(parent)
{
m_pWord = NULL;
m_pDocuments = NULL;
m_pDocument = NULL;
}
void MyWord::createWordDocument()
{
m_pWord = new QAxWidget("Word.Application");//新建一个word应用程序
m_pWord->setProperty("Visible", false);//不显示窗体
QAxObject *pDocuments = m_pWord->querySubObject("Documents");
pDocuments->dynamicCall("Add(Qstring)", QString::fromLocal8Bit("D:/app/mode.dot"));//模版目录
m_pDocument = m_pWord->querySubObject("ActiveDocument");//获取当前激活的文档
}
bool MyWord::insertText(QString Tag, QString text)
{
if (m_pDocument->isNull()) return false;//首先判断有没有获取当前激活的文档,没有则返回失败
QAxObject *pBookMarkCode = m_pDocument->querySubObject("Bookmarks(QVariant)", Tag);//获取指定标签
if (pBookMarkCode)
{
pBookMarkCode->dynamicCall("Selection");//选择该指定标签
pBookMarkCode->querySubObject("Range")->setProperty("Text", text);//往标签处插入文字
delete pBookMarkCode;
return true;
}
return false;
}
void MyWord::saveAndQuit(const QString &text)
{
m_pDocument->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(text));//“/”换成“\”;否则在windows下保存不成功
m_pDocument->dynamicCall("Colse(boolean)", true);//关闭
m_pDocument->dynamicCall("Quit()");//退出
QProcess shut;
QString cmd="taskkill /im WINWORD.EXE /f";
shut.execute(cmd);
}
该方法只能在固定位置插入文字,只能达到上述场景的第一条,且运行的电脑上需要装有office。
1.有固定的word模板,需要往里填入不同信息时。
2.word模板中需要插入图片。
3.word模板中有不确定行数的表格需要填写。
原始方法:
一、用word打开文档,在需要填写信息的空格处插入书签。
二、将文档另存为dot格式。
操作word类:
h
#ifndef MYWORD_H
#define MYWORD_H
/********************************************
*提供一个操作word的类
*该类具有以下功能:
*1.指定标签插入文字
*
*********************************************/
#include <QObject>
#include <QAxObject>
#include <QAxWidget>
class MyWord : public QObject
{
Q_OBJECT
public:
explicit MyWord(QObject *parent = 0);
private:
QString m_fileName;//存入位置
QAxWidget *m_pWord;
QAxObject *m_pDocuments;
QAxObject *m_pDocument;//
public:
void createWordDocument();//创建word文档
bool insertText(QString Tag, QString text);//往标签处插入文字,tag书签名称,text插入的文字
bool insertPic(QString Tag,QString Picpath);//往标签处插图片
void saveAndQuit(const QString &text);//保存文档并退出
signals:
public slots:
};
#endif // MYWORD_H
cpp
#include "myword.h"
#include <QFileDialog>
#include <QDebug>
#include <QProcess>
MyWord::MyWord(QObject *parent) : QObject(parent)
{
m_pWord = NULL;
m_pDocuments = NULL;
m_pDocument = NULL;
}
void MyWord::createWordDocument()
{
m_pWord = new QAxWidget("Word.Application");//新建一个word应用程序
m_pWord->setProperty("Visible", false);//不显示窗体
QAxObject *pDocuments = m_pWord->querySubObject("Documents");
pDocuments->dynamicCall("Add(Qstring)", QString::fromLocal8Bit("D:/app/mode.dot"));//模版目录
m_pDocument = m_pWord->querySubObject("ActiveDocument");//获取当前激活的文档
}
bool MyWord::insertText(QString Tag, QString text)
{
if (m_pDocument->isNull()) return false;//首先判断有没有获取当前激活的文档,没有则返回失败
QAxObject *pBookMarkCode = m_pDocument->querySubObject("Bookmarks(QVariant)", Tag);//获取指定标签
if (pBookMarkCode)
{
pBookMarkCode->dynamicCall("Selection");//选择该指定标签
pBookMarkCode->querySubObject("Range")->setProperty("Text", text);//往标签处插入文字
delete pBookMarkCode;
return true;
}
return false;
}
void MyWord::saveAndQuit(const QString &text)
{
m_pDocument->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(text));//“/”换成“\”;否则在windows下保存不成功
m_pDocument->dynamicCall("Colse(boolean)", true);//关闭
m_pDocument->dynamicCall("Quit()");//退出
QProcess shut;
QString cmd="taskkill /im WINWORD.EXE /f";
shut.execute(cmd);
}
该方法只能在固定位置插入文字,只能达到上述场景的第一条,且运行的电脑上需要装有office。