Qt 导出word

这篇具有很好参考价值的文章主要介绍了Qt 导出word。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

qt导出可以利用QAxObject去导出word或者excel等。
QAxObject主要是调用QAxObject的 querySubObject、dynamicCall、setProperty等方法,其中方法的参数属性,可以通过word官网查询,具体属性怎么用,暂时也没找到有相应文档,有需要可以结合office官方文档属性和下面分享的或者网上找下资料的,依葫芦画瓢,找规律试一试。
qt生成word文档,qt,ui,c++
下面分享导出word的一些常用属性。

Test案例

首先在.pro文件中需要加入:QT += axcontainer
使用时加头文件

#include <QAxObject>

不多bb直接上代码
.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QAxObject>
#include <QFile>
#include <QMap>
#include <QDebug>
#include <QFileDialog>
#include <QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QAxObject* m_wordWidget = new QAxObject();
    bool flag = m_wordWidget->setControl("Word.Application");//初始化COM对象,新建一个word应用程序
    if(!flag)
    {
        flag = m_wordWidget->setControl("kwps.Application");//尝试用wps打开
        if(!flag)
            return;
    }

    m_wordWidget->setProperty("Visible", true);//设置为可见,false 则不会在界面打开显示

    QAxObject* documents = m_wordWidget->querySubObject("Documents");//获取所有的工作文档(返回一个指向QAxObject包含的COM对象)
    if(!documents)
        return ;

    //法 一
//    QString filePathDot = "D:/qt-test/word/Doc1.dot";
//    QFile file(filePathDot);
//    if(file.exists())
//        documents->dynamicCall("Add(const QString&)",filePathDot);//以Doc1.dot新建一个
//    else
//        return ;
     //法二
    QString filePathDocx = "D:/qt-test/word/test.docx";
    QFile file(filePathDocx);
    if(file.exists())
        documents->dynamicCall("Open(const QString&)",filePathDocx);//直接打开一个空文档
    else
        return;
    //上面描述的方法,都必须要在先创建一个文档


    QAxObject *activeDocument = m_wordWidget->querySubObject("ActiveDocument");//获取当前激活的文档

//    //读取word中的文字
//    QAxObject* pRange = activeDocument->querySubObject("Range()");
//   if (NULL != pRange)
//   {
//       QString text = pRange->property("Text").toString();
//       qDebug()<<"read:"<<text;
//       delete pRange;
//       pRange = NULL;
//   }

   //插入文字
    QAxObject* selection  = m_wordWidget->querySubObject("Selection");
    if(!selection)
        return;

    selection->dynamicCall("setStyle(WdBuiltinStyle)", "wdStyleTitle");//设置标题
    selection->querySubObject("Font")->setProperty("Name","微软雅黑");//设置字体
    selection->querySubObject("Font")->setProperty("Size",20);//设置字体大小
    //selection->querySubObject("Font")->setProperty("Color",0);//设置字体颜色
    selection->dynamicCall("TypeText(const QString&)"," 测试报告");
    selection->dynamicCall("TypeParagraph(void)");//插入回车

    selection->dynamicCall("setStyle(WdBuiltinStyle)", "wdStyleSubtitle");//设置副标题
    selection->querySubObject("Font")->setProperty("Name","微软雅黑");
    selection->querySubObject("Font")->setProperty("Size",15);
    selection->dynamicCall("TypeText(const QString&)","勒布朗·詹姆斯个人信息");
    selection->dynamicCall("TypeParagraph(void)");


    selection->dynamicCall("setStyle(WdBuiltinStyle)", "wdStyleHeading1");//设置标题1
    selection->querySubObject("Font")->setProperty("Name","微软雅黑");
    selection->querySubObject("Font")->setProperty("Size",12);
    selection->dynamicCall("TypeText(const QString&)"," 勒布朗·詹姆斯简介");
    selection->dynamicCall("TypeParagraph(void)");


    selection->dynamicCall("setStyle(WdBuiltinStyle)", "wdStyleBodyTextFirstIndent2");//	正文首行缩进
    selection->querySubObject("Font")->setProperty("Name","微软雅黑");
    selection->querySubObject("Font")->setProperty("Size",10);
    selection->dynamicCall("TypeText(const QString&)","勒布朗·詹姆斯(LeBron James),"
    											"全名勒布朗·雷蒙·詹姆斯(LeBron Raymone James),"
                                                "1984年12月30日出生于美国俄亥俄州阿克伦,美国职业篮球运动员,"
                                                "司职小前锋,绰号“小皇帝”,效力于NBA洛杉矶湖人队。");
    selection->dynamicCall("TypeParagraph(void)");


    //插入图片
    QString picPath = "D:/qt-test/word/whoBetter.jpg";
    QAxObject *Inlineshapes = selection->querySubObject("InlineShapes");
    Inlineshapes->dynamicCall("AddPicture(const QString&)",picPath);
    delete Inlineshapes;
    selection->dynamicCall("TypeParagraph(void)");

    selection->dynamicCall("setStyle(WdBuiltinStyle)", "wdStyleHeading2");//设置标题2
    selection->querySubObject("Font")->setProperty("Name","微软雅黑");
    selection->querySubObject("Font")->setProperty("Size",12);
    selection->dynamicCall("TypeText(const QString&)"," 主要荣誉");
    selection->dynamicCall("TypeParagraph(void)");


    selection->dynamicCall("setStyle(WdBuiltinStyle)", "wdStyleBodyTextFirstIndent2");
    selection->querySubObject("Font")->setProperty("Name","微软雅黑");
    selection->querySubObject("Font")->setProperty("Size",10);
    selection->dynamicCall("TypeText(const QString&)","4届NBA总冠军、NBA总决赛MVP(2012;2013;2016;2020)"
                           "3届NBA全明星正赛MVP(2006;2008;2018)"
                           "2届奥运会金牌(2008,2012)"
                           "2019-20赛季NBA助攻王 [8] "
                           "2007-08赛季NBA得分王"
                           "18届NBA全明星阵容(2005-2022)"
                           "17届NBA最佳阵容(13次一阵,3次二阵,1次三阵)");
    selection->dynamicCall("TypeParagraph(void)");


    selection->dynamicCall("setStyle(WdBuiltinStyle)", "wdStyleHeading3");//设置标题2
    selection->querySubObject("Font")->setProperty("Name","微软雅黑");
    selection->querySubObject("Font")->setProperty("Size",12);
    selection->dynamicCall("TypeText(const QString&)"," 重要事件");
    selection->dynamicCall("TypeParagraph(void)");

    QStringList headList;
    headList<<"时间"<<"事件";

    QMap<int , QString> map;
    map.insert(2003,"2003年NBA选秀状元");
    map.insert(2010,"2010年加盟迈阿密热火队");
    map.insert(2014,"2014年重回克利夫兰骑士队");
    map.insert(2016,"2016年夺得克利夫兰骑士队首冠");
    map.insert(2018,"2018年加盟洛杉矶湖人队");

    //插入表格
    QAxObject *range = selection->querySubObject("Range");
    QAxObject *tables = activeDocument->querySubObject("Tables");
    QAxObject *table = tables->querySubObject("Add(QVariant,int,int)",
    range->asVariant(),map.size()+1,headList.length());//map.size 行

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

    //设置表头
    for(int i=0;i<headList.size();i++)
    {
        table->querySubObject("Cell(Long,Long)",1,i+1)->querySubObject("Range")
            ->querySubObject("Shading")
            ->dynamicCall("BackgroundPatternColorIndex", "wdDarkBlue");//设置表格底色

        table->querySubObject("Cell(Long,Long)",1,i+1)->querySubObject("Range")
                ->querySubObject("ParagraphFormat")
                ->dynamicCall("Alignment", "wdAlignParagraphCenter");//设置表格居中

        table->querySubObject("Cell(Long,Long)",1,i+1)->querySubObject("Range")
        ->dynamicCall("SetText(QString)", headList.at(i));//设置表格内容
        table->querySubObject("Cell(Long,Long)",1,i+1)->querySubObject("Range")
        ->dynamicCall("SetBold(int)", true);//加粗
    }

    //填充表格
    QMap<int , QString>::iterator itor = map.begin();
    for (int j=0; itor != map.end(); itor++,j++)
    {
        table->querySubObject("Cell(Long,Long)",j+2,1)->querySubObject("Range")
                ->querySubObject("ParagraphFormat")
                ->dynamicCall("Alignment", "wdAlignParagraphLeft");//居左

        table->querySubObject("Cell(Long,Long)",j+2,1)
        ->querySubObject("Range")->querySubObject("Font")
        ->setProperty("Color","wdColorBlack");//设置字体颜色
        table->querySubObject("Cell(Long,Long)",j+2,1)
        ->querySubObject("Range")->dynamicCall("SetText(QString)", QString::number(itor.key()));


        table->querySubObject("Cell(Long,Long)",j+2,2)->querySubObject("Range")
                ->querySubObject("ParagraphFormat")
                ->dynamicCall("Alignment", "wdAlignParagraphLeft");//居左

        table->querySubObject("Cell(Long,Long)",j+2,2)
        ->querySubObject("Range")->querySubObject("Font")
        ->setProperty("Color","wdColorBlack");//设置字体颜色
        table->querySubObject("Cell(Long,Long)",j+2,2)->querySubObject("Range")
        ->dynamicCall("SetText(QString)", itor.value());
    }

    //跳出表格
    QVariantList params;
    params.append(6);
    params.append(0);
    selection->dynamicCall("EndOf(QVariant&, QVariant&)", params).toInt();

    QString filePath2 = "D:/qt-test/word/test2.docx";
    activeDocument->dynamicCall("SaveAs(const QString&)",
    QDir::toNativeSeparators(filePath2));//保存至filePath2,

}

Widget::~Widget()
{
    delete ui;
}


导出word后

qt生成word文档,qt,ui,c++

总结

相应属性可以在office官网 Docs/office VBA/word 找到这里左边可以就可以搜索相应关键字了 。这里以颜色属性为例,这里也直接附上地址, office官方稳定网址
qt生成word文档,qt,ui,c++
这里只是简单的实现了标题,副标题,插入文字,表格,图片等。文章来源地址https://www.toymoban.com/news/detail-533847.html

到了这里,关于Qt 导出word的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ QT读写Microsoft Word文档基操

        以下是一个简单的示例,演示如何使用C++ QT读写Microsoft Word文档:           #include QAxObject     #include QDebug     void readWordDocument(QString filePath)     {         QAxObject* word = new QAxObject(\\\"Word.Application\\\", 0);         word-setProperty(\\\"Visible\\\", false);         QAxObject* docume

    2024年02月08日
    浏览(33)
  • Python使用Pyside2和Qt Designer实现接口数据查询mainwindow-tablewidget和EXCEL导出功能,并生成EXE可执行文件直接调用.ui文件和生成py调用都有-初学

    通过Pyside2库调用QT Designer的UI文件,直接调用.ui文件和将.ui文件转换为.pt文件进行调用,调用测试成功生成exe文件 可以直接在终端调用 参考:https://blog.csdn.net/qq_44940689/article/details/123913832 直接在终端中运行 -F 只会生成单独的一个exe文件 -w 是双击exe不会打开黑色窗口,可以试

    2024年02月04日
    浏览(45)
  • 【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)

    这篇文章,主要介绍如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 (1)引入依赖 (2)创建Freemarker工具类 (3)测试案例代码 (4)运行效果 Word文件有两种后缀格式,分别是:doc和docx,

    2024年02月13日
    浏览(57)
  • Qt+Pyhton实现麒麟V10系统下word文档读写功能

    前言 我最近遇到一个这样的需求,即把某个软件中采集的数据按照特定的格式导出到world文档中。因为程序是用Qt开发的,所以想找一个满足要求的C++库,通过一番查询发现能完成这个需求的常用C++库有LibreOffice、OpenOffice。这两个库虽然能实现这一需求但是学习成本比较高,

    2024年02月12日
    浏览(34)
  • Qt 调用 Microsoft Excel 组件生成 Excel 文档

    在.pro文件中添加模块: 参考界面:界面中只有一个 pushButton 按钮。 参考代码: mainwindow.h: mainwindow.cpp: 程序执行效果:会在桌面生成一个data.xlsx文档,打开此文档后显示如下信息: 注意:若你的电脑安装的是 WPS ,没有安装 Office,那么使用 WPS 中的 Excel 也是完全没问题的

    2024年02月15日
    浏览(43)
  • Qt6之vc调用qt生成的带ui的dll

    受益于跨平台的特性,Qt生成dll的各种语言调用上体现的淋漓尽致,上篇已经演示了qt生成的无ui的dll及vc如何调用它,本篇将演示vc如何调用qt生成的带ui的dll。 传统观点认为Qt生成的带ui的dll受限于 QApplication 的 exec 方法,这样才能产生消息循环于是只能采用QTWinmigrate中重写

    2024年02月12日
    浏览(38)
  • CMake不生成QT的UI头文件

    QT版本5.14.2:: MSVC_2017_64 编译器VS2019 因为学习QT开发的时候要查看x.ui文件转换成ui_x.h头文件的内容,但是编译器编译的时候没有生成ui_x.h头文件。查看代码发现: 已经引用到了该文件了。可能是编译过程中,生成了,使用了,然后又删掉了。 学习过程,想看到里面的内容 打开

    2024年02月12日
    浏览(40)
  • qt打开项目缺少ui_文件,使用手动生成

    打开项目看到,缺少ui_myMainWindow.h文件,它是和myMainWindow.ui相对应的,所以我们需要手动生成对应的ui_文件。 步骤如下: 使用 uic.exe 来生成,如果在系统变量Path中设置了qt的bin目录,那么就可以直接使用uic.exe。 使用方法是: 在myMainWindow.ui所在文件夹的空白处点击右键,选择

    2024年02月11日
    浏览(38)
  • Qt 修改自动生成的 ui类名的方法和步骤

    abcwidget.cpp:29:12: error: allocation of incomplete type \\\'Ui::AbcWidget\\\' abcwidget.h:17:7: note: forward declaration of \\\'Ui::AbcWidget\\\' Refactor---rename----法, 以及手动修改法; 需要用到内置编辑器,以及外部编辑器。 在修改 ui文件时,需要使用外部编辑器,才能修改。内部编辑器无效? 1. 修改命名空间

    2024年02月06日
    浏览(103)
  • Qt Designer生成ui文件,如何转py文件,如何运行

    下面将逐步介绍ui文件如何转py文件,怎么运行的具体操作步骤 ui文件转py文件 1.使用Qt Designer生成ui文件,保存到本地 2.输入 cmd ,打开命令行窗口 3.进入ui文件的目录下,文件路径使用你本地存放ui文件的位置 4.在命令行中输入 pyuic5 -o py文件名 ui文件名 5.查看ui文件所在的位置

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包