Qt 向word中插入文字(使用QAxWidget和QAxObject)

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 向word中插入文字(使用QAxWidget和QAxObject)相关的知识,希望对你有一定的参考价值。

  1. pro 文件中要加入   

        CONFIG += qaxcontainer   

       2. main.cpp

[cpp] view plain copy
 
  1. #include <QApplication>  
  2. #include <QAxWidget>  
  3. #include <QAxObject>  
  4.   
  5. int main(int argc, char* argv[])  
  6. {  
  7.      QApplication app(argc, argv);  
  8.      QAxWidget *word=new QAxWidget("Word.Application", 0, Qt::MSWindowsOwnDC);  
  9.      word->setProperty("Visible", true);  
  10.      // 获取所有的工作文档  
  11.      QAxObject * documents = word->querySubObject("Documents");  
  12.      // 以文件template.doc为模版新建一个文档  
  13.      documents->dynamicCall("Add(QString)",QString::fromLocal8Bit("D:/doc/template.doc"));  
  14.      // 获取当前激活的文档  
  15.      QAxObject *document=word->querySubObject("ActiveDocument");  
  16.   
  17.      // 获取文档中名字为text的标签  
  18.      QAxObject*bookmark_text=document->querySubObject("Bookmarks(QVariant)","text");  
  19.      // 选中标签,将字符InsertText插入到标签位置  
  20.      if(!bookmark_text->isNull()){  
  21.      bookmark_text->dynamicCall("Select(void)");  
  22.      bookmark_text->querySubObject("Range")->setProperty("Text","InsertText");  
  23.      }   
  24.   
  25.      // 将文件另存为docbyqt.doc,关闭工作文档,退出应用程序  
  26.      document->dynamicCall("SaveAs (const QString&)", QString("D:/doc/docbyqt.doc"));  
  27.      document->dynamicCall("Close (boolean)", false);  
  28.      word->dynamicCall("Quit()");  
  29.   
  30.     return app.exec();  
  31. }  

http://blog.csdn.net/zbc415766331/article/details/36396159

网上关于qt操作word的资料实在是太少了,搞了半天终于能在word 表格中插入标签的地方插入图片了。

1.在pro中加入

CONFIG   += qaxcontainer

2.main.cpp

[cpp] view plain copy
 
 技术分享技术分享
  1. #include <QApplication>  
  2. #include <QAxWidget>  
  3. #include <QAxObject>  
  4.   
  5. int main(int argc, char* argv[])  
  6. {  
  7.      QApplication app(argc, argv);  
  8.      QAxWidget *word=new QAxWidget("Word.Application", 0, Qt::MSWindowsOwnDC);  
  9.      word->setProperty("Visible", true);  
  10.      // 获取所有的工作文档  
  11.      QAxObject * documents = word->querySubObject("Documents");  
  12.      // 以文件template.doc为模版新建一个文档  
  13.      documents->dynamicCall("Add(QString)",QString::fromLocal8Bit("D:/doc/template.doc"));  
  14.      // 获取当前激活的文档  
  15.      QAxObject *document=word->querySubObject("ActiveDocument");  
  16.   
  17.      // 获取文档中名字为text的标签  
  18.      QAxObject*bookmark_text=document->querySubObject("Bookmarks(QVariant)","text");  
  19.      // 选中标签,将字符InsertText插入到标签位置  
  20.      if(!bookmark_text->isNull()){  
  21.      bookmark_text->dynamicCall("Select(void)");  
  22.      bookmark_text->querySubObject("Range")->setProperty("Text","InsertText");  
  23.      }  
  24.   
  25.      // 获取文档中名字为pic的标签  
  26.      QAxObject*bookmark_pic=document->querySubObject("Bookmarks(QVariant)","pic");  
  27.       // 选中标签,将图片插入到标签位置  
  28.      if(!bookmark_pic->isNull())  
  29.      {  
  30.          bookmark_pic->dynamicCall("Select(void)");  
  31.   
  32.          QAxObject *range;  
  33.          range = bookmark_pic->querySubObject("Range");  
  34.          QVariant tmp = range->asVariant();  
  35.          QList<QVariant>qList;  
  36.          qList<<QVariant("D:/1.png");  
  37.          qList<<QVariant(false);  
  38.          qList<<QVariant(true);  
  39.          qList<<tmp;  
  40.   
  41.          QAxObject *Inlineshapes = document->querySubObject("InlineShapes");  
  42.          Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);  
  43.      }  
  44.   
  45.      // 将文件另存为docbyqt.doc,关闭工作文档,退出应用程序  
  46.      document->dynamicCall("SaveAs (const QString&)", QString("D:/doc/docbyqt.doc"));  
  47.      document->dynamicCall("Close (boolean)", false);  
  48.      word->dynamicCall("Quit()");  
  49.   
  50.     return app.exec();  
  51. }  

addpicture 微软官方注解:http://msdn.microsoft.com/en-us/library/office/aa171535(v=office.11).aspx

http://blog.csdn.net/zbc415766331/article/details/36659993

 

HRESULT r;
r = CoInitialize(0);
// r =CoInitializeEx(0, COINIT_MULTITHREADED);
// m_word = new QAxWidget("Word.Application", widget, Qt::MSWindowsOwnDC );
m_word = new QAxObject("Word.Application" );
if( m_word == NULL ) return true;
//m_word->setProperty("Visible", false); //设置为隐藏
QAxObject * documents = m_word->querySubObject("Documents"); //获取所有工作的文档

http://www.qtcn.org/bbs/read-htm-tid-60802.html

 

以上是关于Qt 向word中插入文字(使用QAxWidget和QAxObject)的主要内容,如果未能解决你的问题,请参考以下文章

qt 操作word

Qt 5.7.0 使用 QAxWidget 显示网页

Qt 使用 QAxWidget 实现与 JavaScript 的交互

分别使用docx4j,jacob将文字与图片插入word中书签位置

在qt中如何用SQLite向表中插入日期型变量?

mfc中嵌套qt,qt动态库里面用QAxwidget加载html网页后,qt界面非常卡