C++中如何实现Word文档的写入与保存操作

 更新时间:2026年08月31日 10:46:32   作者:在选择中迷失自我  
想知道如何在C++中写入Word文档并保存吗?本文通过源码示例详细讲解了使用QAxObject动态调用Word组件的过程,包括获取文件路径、写入数据和调用SaveAs保存文件的关键步骤,避免常见的缓冲区误区,让你轻松掌握C++操作Word文档的技巧

C++word写入

开发工具与关键技术:QtCreator、C++
作者:何任贤
撰写时间:2019年05月25日

Word文档写入

我们先要在工程文件加入

QT += axcontainer

我们要用到的头文件有

#include
#include

下面是源码

void Dialog::writeWord()
{
 //打开一个Word应用程序
 myword = new QAxObject("Word.Application");

 //找到其Documents子对象,代表Word文档集
 mydocs = myword->querySubObject("Documents");

//新建一个Word文档

mydocs->dynamicCall("Add(void)");

上面是新建word文档的,下面是打开准备好的word文档

//获取文件路径

QString path = QDir::currentPath() + "/myWord.docx";
path = QDir::toNativeSeparators(path);
//打开一个Word文档
mydocs->dynamicCall("Open(const QVariant&)",QVariant(path));

//获取当前word文档对象
mydoc = myword->querySubObject("ActiveDocument");

//获得文档当前选内容,一个文档只有一个Selection
selection = myword->querySubObject("Selection");

//写入
QString str = lineedit->text();
selection->dynamicCall("TypeText(const QString&)",str);
selection->dynamicCall("TypeText(const QString&)",QVariant("\n"));

这上面的写入是先获取到要写入到word文档的数据,然后写入数据,此时文档还没有保存,如果我们没有执行下面的“mydoc->dynamicCall(“SaveAs(const QString&)”,path); ”时,是不会在我们电脑上创建word文档的,这里的操作都还在缓冲区中。

//保存文件路径
QString path = QDir::currentPath() + "/myWord";
path = QDir::toNativeSeparators(path);
qDebug()<<path;

上面这一段保存文件路径是获取路径,我们把创建的word文档要保存到哪里。

//保存
mydoc->dynamicCall("SaveAs(const QString&)",path);

这一句

才是真正的把缓冲区中的word文档创建,并且把已经写入的数据保存,这就相当于我们在打开word文档后写入数据,保存文档,当然我们是在缓冲区创建的word文档,并且也是在缓冲区是写入的数据所以这一步就是保存文档。

下面图片是我注释上面那句后进行写入操作触发的word文档另存为事件

并且我们可以看到那文件名是我们要写入的数据。

//关闭文档
mydoc->dynamicCall("Close()");
delete mydoc;
mydoc = NULL;

//退出程序
myword->dynamicCall("Quit()");
delete myword;
myword = NULL;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 用c语言实现和平精英的完整代码

    用c语言实现和平精英的完整代码

    这篇文章主要介绍了用c语言实现和平精英的完整代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • C++内存对象布局小测试

    C++内存对象布局小测试

    这篇文章主要介绍了C++内存对象布局小测试,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • C++中强类型枚举(scoped enumeration)的实现

    C++中强类型枚举(scoped enumeration)的实现

    C++11引入的强类型枚举解决了传统枚举的三大缺陷:作用域污染、隐式类型转换和底层类型不确定,本文就来详细的介绍一下强类型枚举的使用,感兴趣的可以了解一下
    2025-11-11
  • 详解DAG上的DP

    详解DAG上的DP

    DAG:有向无环图。DAG是学习动态规划的基础,很多问题都可以直接转化为DAG上的最长路、最短路或路径计数问题。本文将详细介绍DAG上的DP。
    2021-05-05
  • C++和java设计模式之单例模式

    C++和java设计模式之单例模式

    这篇文章主要为大家详细介绍了C++和java设计模式之单例模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • C++中vector和map的删除方法(推荐)

    C++中vector和map的删除方法(推荐)

    下面小编就为大家带来一篇C++中vector和map的删除方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 详解C++17中nodiscard标记符的使用

    详解C++17中nodiscard标记符的使用

    在C++ 17中引入了一个标记符nodiscard,用于声明一个 “非弃值(no-discard)表达式”。这篇文章就来和大家来聊一聊nodiscard标记符的使用吧
    2023-02-02
  • C语言进阶:指针的进阶(5)

    C语言进阶:指针的进阶(5)

    这篇文章主要介绍了C语言指针详解及用法示例,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下
    2021-09-09
  • C语言中回调函数的使用详情

    C语言中回调函数的使用详情

    这篇文章主要介绍了C语言中回调函数的使用详情,阅读下文我们将学习到架构的核心理念和需、回调函数的作用、回调函数的程序编写等内容,需要的小伙伴可以参考一下
    2022-03-03
  • C语言中关于scanf函数的一些问题详解

    C语言中关于scanf函数的一些问题详解

    这篇文章主要为大家介绍了C语言中关于scanf函数的一些问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12

最新评论