Qt导出word报告(QAxObject)

一.QAxObject简介

1.1 机制(通过com组件操作office)

office/vba/官方api说明

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)");//
    }
}

三.逐个添加

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值