在Windows环境下,在Qt里面操作Office文档,可以通过AxContainer模块调用Office全家桶的Com组件。
完成这个操作,需要使用到AxContainer模块中的QAxObject。
使用这种方法操作Office文件,好处是可以非常精确,精确到Word文档的每一个字符、PowerPoint的每一个图片以及Excel文档的每一行一列……那种程度。
但是麻烦的是,太精确了,就没有那么简便。当我们想实现简单地预览、统计、输出等只读功能的时候,会比较复杂。而且,雪上加霜的是,同样一个小需求,对不同类型的文档,都需要使用不同的类,不同的方法,不同的属性。
下面进入正题,先说说如何使用。
AxContainer模块
首先,确保安装了Qt的AxContainer模块。这个模块只有在Windows下的Qt开发环境才有,Linux等系统中没有,当然也不需要。
在qt的安装过程里,选择模块的那一页,其中有一个复现框内容是QtActive,就是我们需要的模块。确保安装qt环境的时候,选择了QtActive。
其次,需要把它的头文件包含到项目中,另外连接它的库文件。它的CMake文件并不叫QtActive,而是叫AxContainer:
FIND_PACKAGE(Qt6AxContainer REQUIRED)
INCLUDE_DIRECTORIES(${Qt6AxContainer_INCLUDE_DIRES})
QAxObject类
把Qt6Container的头文件目录加入编译环境之后,就可以直接包含QtAxContainer这个头文件,使用QtAxContainer中的类QAxObject了。
#include <QtAxContainer>
QAxObject最常用的构造函数是:
QAxObject(const QString &c, QObject *parent = nullptr);
其中,c指的是Com的名称。比如,要操作Word文档,就传入Word.Application。
如:
auto application = new QAxObje