Qt在windows下读Word文件(QAxWidget/QAxObject使用)

(注:涉及QAxWidget、QAxObject类,需要在.pro文件中加入 CONFIG += qaxcontainer)

Word操作接口获取途径:

  1. Microsoft Office的所有接口手册: https://docs.microsoft.com/en-us/office/vba/api/overview/word

  2. 利用QAxWidget、QAxObject可以得到对应对象的手册:返回值类型为QString,字符串内容为HTML的文本格式,可以将该字符串储存为文件,或者用QTextBrowser之类的控件展示出来。

常用方法:
(注:方法1、2使用方式相同,使用时根据返回值类型选择对应方法)

  1. 启动应用方法
  • QAxWidget::QAxWidget ( const QString & c, QWidget * parent = 0, Qt::WindowFlags f = 0 ) —— 创建QAxWidget,并初始化ActiveX控件c
  • setControl(const QString &) —— 初始化COM对象
//下面三行代码可以实现打开a.docx文件
pWord = new QAxWidget("Word.Application",this);//初始化
pDocuments = pWord->querySubObject("Documents");//获取到所有已经打开的word文件集合
pFileA = pDocuments->dynamicCall("open(QString)",“a.docx” );//打开a.docx文件,后续需要对a.docx进行的读写操作都要通过pFileA进行
//下面一行代码可以实现打开a.docx文件
pWord->setControl(“a.docx”)//操作成功后直接打开a.docx文件,后续需要对文件进行的读写操作直接通过pWord进行,等同于上面代码中的pFileA
  1. QAxObject* querySubObject(name,args…)
  • 用于获取对象的名称为name属性(property)
  • 用于直接调用对象的name方法(method)
  • 返回值类型仍然为QAxObject*

例如获取范围(pRange)内的第三个段落(pParagraph3)可以有下面两种写法:

//下面两段代码效果一样
pParagraph3 = pRange->querySubObject("Paragraphs(3)");
pParagraph3 = pRange->querySubObject("Paragraphs(int)", 3);
  1. QVariant dynamicCall(name,args…)
  • 用于获取对象的名称为name属性(property)
  • 用于直接调用对象的name方法(method)
  • 返回值类型为QVariant,该属性通常为常用类型如:数值、字符串、和bool

例如查询选择的范围(pRange)是否存在于表格中:

//下面两段代码效果一样
bInTable = pRange->dynamicCall("Information(12)").toBool()
bInTable = pRange->dynamicCall("Information(int)", 12).toBool()

注:上面代码块中12代表的是WdInformation Enum中的wdWithInTable,若选中范围在表格中则返回true。
在这里插入图片描述
4. QVariant property(name)

  • 用于获取对象的名称为name属性(property)
  • 返回值类型为QVariant,该属性通常为常用类型如:数值、字符串、和bool

例如获取范围(pRange)内的文本:

QString test = pRange->property("Text").toString();

你可能感兴趣的:(QT)