因为最近项中需要生成报表,所以网上查了资料,因为VB看不懂所以总结的也不多,在实现中没有使用标签只是以光标的位置来插入,包括:创建文件,排版方式,添加文字,添加图片,添加表格,表格添加文字(图片),光标移动到尾部,光标跳转(类似tab)等

添加 QT += axcontainer

QAxObject *m_pWord;      //指向整个Word应用程序
QAxObject *m_pWorkDocuments;  //指向文档集,Word有很多文档
QAxObject *m_pWorkDocument;   //指向m_sFile对应的文档,就是要操作的文档

/*
    创建word
*/

void MainWindow::open()
{
    m_pWord = new QAxObject();
    bool flag = m_pWord->setControl( "Word.Application" );
    if(!flag)
    {
        return;
    }
    m_pWord->setProperty("Visible", true);

QAxObject *document = m_pWord->querySubObject("Documents");
    if(!document)
    {
        return ;
    }

//获取当前激活的文档
    m_pWorkDocument = m_pWord->querySubObject("ActiveDocument");
}

/*
 * 排版方式
 * 纵行、横行
*/

void MainWindow::setype(bool type)
{
    QAxObject* selection = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return;
    }
    if(type)
    {
        selection->querySubObject("PageSetup")->setProperty("Orientation","wdOrientLandscape");
    }else{
        selection->querySubObject("PageSetup")->setProperty("Orientation","wdOrientPortrait");
    }
}

/*
 * 获取页宽
*/

int MainWindow::pageWidth()
{
    int width;
    QAxObject* selection = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return;
    }
    width = selection->querySubObject("PageSetup")->property("PageWidth").toInt();;
    return width;
}

/*
*设置字号
*/

void MainWindow::setFontSize(int size)
{
    QAxObject* selection = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return;
    }
    selection->querySubObject("Font")->setProperty("Size",size);
}

/*
   设置对齐方式
*/

void MainWindow::setAlignment(int index)
{
    QAxObject *selection = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return;
    }
    if(index == 0)
    {
      selection->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphCenter");
    }
    if(index == 1)
    {
       selection->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphJustify");
    }
    if(index == 2)
    {
       selection->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphRight");
    }
    if(index == 3)
    {
       selection->querySubObject("ParagraphFormat")->setProperty("Alignment","wdAlignParagraphLeft");
    }
}

/*
   插入文字
*/

void MainWindow::typeText(QString text)
{
    QAxObject* selection  = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return;
    }
    selection->dynamicCall("TypeText(const QString&)",text);
}
/*
    插入图片
*/

void MainWindow::AddPicture(QString file)
{
    QAxObject* selection  = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return;
    }
    QString filename = file;
    filename.replace("/","\\");
    QAxObject *Inlineshapes = selection->querySubObject("InlineShapes");
    Inlineshapes->dynamicCall("AddPicture(const QString&)",filename);
    delete Inlineshapes;
}

/*
    插入回车
*/

void MainWindow::insertEnter()
{
    QAxObject* selection  = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return;
    }
    selection->dynamicCall("TypeParagraph(void)");
}

/*
 * 光标移到末尾,跳出单元格
*/
void MainWindow::moveForEnd()
{
    QAxObject* selection = m_pWord->querySubObject("Selection");
    QVariantList params;
    params.append(6);
    params.append(0);
    selection->dynamicCall("EndOf(QVariant&, QVariant&)", params).toInt();
}

/*
   创建表格
   QStringList headList 添加表头
*/

QAxObject* MainWindow::createTable(int row, int column,QStringList headList)
{
    QAxObject* selection  = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return false;
    }
    selection->dynamicCall("InsertAfter(QString&)", "\r\n");

QAxObject *range = selection->querySubObject("Range");
    QAxObject *tables = m_pWorkDocument->querySubObject("Tables");
    QAxObject *table = tables->querySubObject("Add(QVariant,int,int)",range->asVariant(),row,column);

table->setProperty("Style","网格型");
    //表格自动拉伸列 0固定  1根据内容调整  2 根据窗口调整
    table->dynamicCall("AutoFitBehavior(WdAutoFitBehavior)", 2);

//设置表头
    for(int i=0;i<headList.size();i++)
    {
        table->querySubObject("Cell(int,int)",1,i+1)->querySubObject("Range")->dynamicCall("SetText(QString)", headList.at(i));
        //加粗
        table->querySubObject("Cell(int,int)",1,i+1)->querySubObject("Range")->dynamicCall("SetBold(int)", true);
    }
    return table;
}

/*
   填充表格
*/

void MainWindow::setCellText(QAxObject *table, int row, int column, QString text)
{
    QAxObject* range = table->querySubObject("Cell(int, int)",row+1,column+1)->querySubObject("Range");
    if( range)
    {
        return;
    }

range->dynamicCall("SetText(QString)", text);
}

/*
  表格插入图片
*/
void MainWindow::setAddPicture(QAxObject *table, int row, int column, QString picPath)
{
    QAxObject* range = table->querySubObject("Cell(int, int)",row+1,column+1)->querySubObject("Range");
    if(!range)
    {
        return;
    }
    range->querySubObject("InlineShapes")->dynamicCall("AddPicture(const QString&)",picPath);
}

/*
   光标跳转,类似表格中的tab
*/

void MainWindow::moveRight()
{
    QAxObject* selection  = m_pWord->querySubObject("Selection");
    if(!selection)
    {
        return;
    }
    selection->dynamicCall("MoveRight(int)",1);
}

/*特殊样例*/

void MainWindow::Example()
{
    QStringList header;

newTable(1,2,header);//创建表格

typeText(tr("文字1"));//添加文字
    insertEnter();//换行
    insertText("");
    AddPicture("图像1");//插入图片

moveRight();//将光标插入到下个单元格中

typeText(tr("文字2"));
    insertEnter();
    insertText("");
    AddPicture("图像2");

moveForEnd();//光标跳出表格

/*然后,可以做其他操作了*/

}

Qt 使用QAxObject操作Word相关推荐

  1. Qt随手笔记(五)vs+qt使用QAxObject读取word(内容、句子、段落、表格)

    一.配置环境 1.配置环境 本案例使用的vs2019.qt5.12.10和word2016 a) 使用vs2019新建一个QtWidgetsApplication项目 b)加载头文件和库 打开项目的属 ...

  2. QT ACTIVEX最新操作WORD文档的一些心得

    QAxWidget *m_pWord = new QAxWidget("Word.Application");//新建一个word应用程序m_pWord->setProper ...

  3. Qt操作Word文档

    Qt提供QAxObject操作Word文档,实现写入文档 准备工作 1.Qt pro文件中加入QT += axcontainer 2.电脑上至少有Word或者WPS 操作Word /********* ...

  4. QAxObject在Word 光标 或 标签 处插入文字、图片、表格、标题1等

    QAxObject操作word #插入word标题1级 2级 链接: [link](https://docs.microsoft.com/en-us/office/vba/api/word.wdbui ...

  5. QT下使用QAxObject打开word文档,文档路径含有空格open出错的解决方法

    将要打开的文档转换为本地路径即可,缺省状态下QT路径的分割符为"/",而windows下路径的分隔符为"\",大多数场景下使用QT默认的就行,但是在操作QAxO ...

  6. QT操作Word,插入表格

    最近在做QT导出word报表,发现网上的资源不是很多,也浪费了很多时间,我自己做了一份demo,将会详细讲述如何做出需要样式的报表.在网上很容易查到java或者其他语言操作word的接口函数,但是QT ...

  7. Qt下使用QAxObject进行Word转换为PDF出现错误 error: undefined reference to `QAxObject::QAxObject(QObject*)‘

    Qt下使用QAxObject进行Word转换为PDF出现错误 error: undefined reference to `QAxObject::QAxObject(QObject*)' 首先检查以下 ...

  8. 用Qt操作Word文档

    由于项目需要通过dot模板导出doc的文档,所以就查了资料写了一个操作word 的类,只实现了部分功能,其代码如下: #include "wordengine.h" #includ ...

  9. Qt操作Word——在书签处插入表格

    之前做的项目需要用Qt创建并输出word文件作为报告,但是报告格式比较复杂.搜索网上资源后发现,仅凭Qt的API难以实现复杂的格式,尤其是表格嵌套很是麻烦.最后的方案选择用先手动创建word模板,并在 ...

最新文章

  1. Android 一个activity 加载一个Fragment
  2. 查询Sqlserver数据库死锁的一个存储过程
  3. [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]
  4. Spring 配置文件详解
  5. 拓端tecdat|R软件SIR模型网络结构扩散过程模拟
  6. 脚本之家去广告JS插件
  7. python数字转英文_python:将数字转换成用英文表达的程序 | 学步园
  8. http状态码全解读
  9. 数字校园APP开发与应用
  10. 【采样算法】拉丁超立方采样
  11. Mac启动台缺少已下载应用软件图标
  12. 高德地图 定位失败,10: 定位服务启动失败 解决办法
  13. name = STXingkai/OT, rootname = STXingkai/OT LaTex Package fontspec Error报错解决
  14. 快乐大脚!快乐的帝企鹅!
  15. Facebook React完全解析
  16. lvgl roller(滑动列表控件)
  17. 网站推广之搜索引擎篇(转)
  18. 200228批量导入开票接口出错,用另外一种方式解决,快速开票顺畅
  19. 被解放的姜戈07 马不停蹄
  20. ChatGPT一路狂飙,对于教培机构是危险还是机遇?

热门文章

  1. DIV布局 旅游出行网站设计——武汉旅游(11页) HTML+CSS+JavaScript dreamweaver作业静态HTML网页设计模板
  2. Babel7的简单使用
  3. 新栏目上线|我是戴小乐-集美貌与才华于一身~
  4. ubuntu 安装GPU黑屏 修改GRUB_qemu-kvm安装and配置桥接和SR-IOV - 山河故人abin
  5. 新华社科普漫画刷屏:一分钟看懂区块链
  6. 3D Vision Rebuttal
  7. 使用for循环加if-else实现两个数最小公倍数和最大公约数的计算
  8. 金山办公测试开发面试总结
  9. 秉火429笔记之十五 DMA--直接存储区访问
  10. 一个命令就可启用的微信机器人WhoChat