近日需要通过QT为项目添加word操作接口,为数据生成word文档,因此通过网上查阅并借鉴相关资料,实现了基本的功能,包括文本的填充,标题的设置,表格的插入,图片的插入等,主要通过word模板(.dot)和word书签进行操作。
一、注意事项
需要注意的是在.pro文件中添加 :QT += widgets gui axcontainer
尚不能通过代码实现向word文档中添加书签的操作
向表格添加行操作存在少许问题,只能向定位行的上方添加行,具体到应用时,对于需要动态表格行数的情况,我的做法是先创建表头行和一行空行,之后动态添加表格行时,第一次为设置空行内容,之后的行添加则以在该行上不断插入新行完成
设置标题可根据需要修改标题类型,这里由于项目需要只设置标题3级别。
有任何疑问和建议欢迎指出
二、主要方法
所有的插入都基于.dot模板文件中已有的书签(标签,以下以标签代指),包括设置标签内容,批量设置标签内容,设置内容粗体,设置文字大小,设置标题,插入图片,插入表格,合并单元格,设置表格内容,添加行。
三、函数
wordengine.h文件
#ifndef WORDENGINE_H
#define WORDENGINE_H
#include <QObject>
#include <QAxObject>
#include <QAxWidget>
//#include <QThread>
class WordEngine : public QObject
{
Q_OBJECT
public:
explicit WordEngine(QObject *parent = 0);
WordEngine(const QString& strFile, QObject *parent = 0);
~WordEngine();
bool open(bool bVisable = false);
bool open(const QString& strFile, bool bVisable = false);
bool close();
bool isOpen();
void save();
bool saveAs(const QString& strSaveFile);
// 设置标签内容
bool setMarks(const QString& strMark, const QString& strContent);
//插入标题 3
bool setTitle(const QString& strMark, const QString& strContent);
// 批量设置标签
bool setBatchMarks(QStringList &itemList,QStringList sometexts);
// 创建表格
void insertTable(int nStart, int nEnd, int row, int column);
QAxObject *insertTable(QString sLabel,int row, int column);
//合并单元格
void MergeCells(QAxObject *table, int nStartRow,int nStartCol,int nEndRow,int nEndCol);
//插入图片
void insertPic(QString sLabel,const QString& picPath);
//设置列宽
void setColumnWidth(QAxObject *table, int column, int width);
// 设置表格内容
void setCellString(QAxObject *table, int row, int column, const QString& text);
// 为表格添加行
void addTableRow(QAxObject *table, int nRow, int rowCount);
// 设置内容粗体 isBold控制是否粗体
void setCellFontBold(QAxObject *table, int row, int column, bool isBold);
// 设置文字大小
void setCellFontSize(QAxObject *table, int row, int column, int size);
// 在表格中插入图片
void insertCellPic(QAxObject *table, int row,int column,const QString& picPath);
private:
bool m_bOpened;
QString m_strFilePath;
QAxObject *m_wordDocuments;
QAxObject *m_wordWidget;
// QThread *m_thread;
signals:
public slots:
};
#endif // WORDENGINE_H
wordengine.cpp文件
#include "wordengine.h"
#include "qt_windows.h"
//#include <QDebug>
//#include <windows.h>
WordEngine::WordEngine(QObject *parent) :
QObject(parent),
m_bOpened(false),
m_wordDocuments(NULL),
m_wordWidget(NULL)
{
}
WordEngine::WordEngine(const QString& strFilePath