在Qt中导出word文档时,从网上看,一般采用模板加书签的方式,但在书签处插入文本时默认插到其后面, 其实,对于编程而言,将文本插到其前面更方便,网上搜了好久也未找到相应的解决方法, 最后还是自己想到了一种可行的方法,列出以供参考。
bool AutomaticTest::insertText(QString sLabel, QString sText)
{
if(!m_pWordApp)
{
return false;
}
//获取文档中名字为sLabel的标签
QAxObject *pBookmark = m_pActiveDocument->querySubObject("Bookmarks(QString)",sLabel);
if(pBookmark)
{
pBookmark->dynamicCall("Select(void)"); //选择该书签
//pBookmark->querySubObject("Range")->setProperty("Text",sText); //插入文字,默认插到书签的后面
//pBookmark->dynamicCall("InsertBefore(QString)", sText); //不支持
QAxObject* selection = m_pWordApp->querySubObject("Selection"); //获得选中区域
selection->dynamicCall("TypeText(const QString&)", sText); //插入文字
selection->dynamicCall("TypeParagraph(void)");//插入回车
delete pBookmark;
//不能将所写的文字插到书签的后面,那么就移动书签到所写的文字后面
QAxObject *pBookmarks = m_pActiveDocument->querySubObject("Bookmarks"); //获取所有的书签
QList<QVariant> list;
list << sLabel << m_pWordApp->querySubObject("Selection")->property("Range"); //指定要移动的书签名和移动位置
pBookmarks->dynamicCall("Add(QString, QVariant)", list);
return true;
}
else
{
return false;
}
}