一.QAxObject简介
1.1 机制(通过com组件操作office)
1.2 版本
Qt5.2 ActiveQt模块(QAxWidget,QAxObject,OleInitialize(初始化com库),OleUninitialize)。
Qt5.9 axcontainer模块(QAxWidget,QAxObject)。
QAxWidget类是一个包装ActiveX控件的QWidget。
1.3 常用封装类
qword
WordEngine(下文为例)
1.4 处理方式(文字、表格、图片)
A.模板文件标签处替换。
B.逐个添加。
二.标签处替换
2.1 插入文字(是否替换)
基于office编辑标签后·,再在wps上编辑的标签可能无效。
bool WordEngine::setMarks(const QString& strMark, const QString& strContent)
{
QAxObject* bookmarkCode = m_wordDocuments->querySubObject("Bookmarks(QVariant)", strMark);
//选中标签,将字符textg插入到标签位置
if(bookmarkCode)
{
bookmarkCode->dynamicCall("Select(void)");
bookmarkCode->querySubObject("Range")->setProperty("Text", strContent);
return true;
}
return false;
}
2.2 插入图片(是否替换)
void WordEngine::insertPic(QString sLabel,const QString& picPath,bool bReplace)
{
QAxObject *bookmark=m_wordDocuments->querySubObject("Bookmarks(QVariant)",sLabel);//"Bookmarks(QString)"
// 选中标签,将图片插入到标签位置
if(bookmark){
bookmark->dynamicCall("Select(void)");
QAxObject *Inlineshapes;
if(bReplace){
Inlineshapes = m_wordWidget->querySubObject("Selection")->querySubObject("InlineShapes");
//AddPicture(_FileName_,_LinkToFile_,_SaveWithDocument_,_Range_)
Inlineshapes->dynamicCall("AddPicture(const QString&)",picPath);//"E:/Data/Word/1.jpg"
}
else{
// QAxObject *selection = m_wordWidget->querySubObject("Selection");
// selection->querySubObject("ParagraphFormat")->dynamicCall("Alignment", "wdAlignParagraphCenter");
QAxObject *range = bookmark->querySubObject("Range");
QVariant tmp = range->asVariant();
QList<QVariant>qList;
qList<<QVariant(picPath);
qList<<QVariant(false);
qList<<QVariant(true);//
qList<<tmp;
Inlineshapes = m_wordDocuments->querySubObject("InlineShapes");
Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
}
delete Inlineshapes;
//selection->dynamicCall("TypeParagraph(void)");//
}
}