Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Использование activeqt



  • Доброго времени суток!

    Использую QAxWidget и QAxObject для автоматизации MS Office Word.
    Мне необходимо открыть word в QAxWidget, это проше всего

    @QAxWidget *WordDocument=new QAxWidget("Word.Document",this->ui->centralWidget);
    WordDocument->setGeometry(QRect(10, 10, 630, 300));
    WordDocument->show();@

    или
    @QAxWidget *WordDocument=new QAxWidget(this->ui->centralWidget);
    WordDocument->setGeometry(QRect(10, 10, 630, 300));
    WordDocument->setControl("D:\doc.docx");
    WordDocument->show();
    ...
    @

    После открытия документа мне необходимо выполнить некоторые действия т.е считывать текст, работать с COM объектами которые находится в документе, для это мне нужен Selection, InlineShapes ...

    Если запустить Word c помошью QAxWidget необходимо возвращать Application и через Application вызывать нужными мне классами например Selection.
    @QAxObject *Application=WordDocument->querySubObject("Application()");
    QAxObject *Selection =Application->querySubObject("Selection()");
    ...
    @

    Вот тут понятно что то не с Selection, и я решил воспользоваться IDispatch
    @QAxObject Application=new QAxObject("Word.Application");
    QAxObject Documents=Application->querySubObject("Documents()");
    QAxObject Document=Documents->querySubObject("Open(QVariant)",QVariant(file));
    IDispatch idispatch=0;
    Document->queryInterface(IID_IDispatch, (void
    )&idispatch);
    QAxWidget
    WidgetDocument= new QAxWidget((IUnknown
    )idispatch,this->ui->centralWidget);
    WordDocument->show();
    ...@

    В этом случае можно работать с WordDocument как с Document и все работает на 99.99% , но QAxWidget не отображается
    Я думаю что я делаю что то не то, когда вызываю IDispatch.
    Как мне показать Word в своем окне?



  • @QAxWidgetWidgetDocument= new QAxWidget((IUnknown)idispatch,this->ui->centralWidget);
    WordDocument->show();@
    Создаете WidgetDocument
    а показываете WordDocument
    точно все правильно?



  • извиняюсь это опечатка, там должен быть
    @QAxWidgetWidgetDocument= new QAxWidget((IUnknown)idispatch,this->ui->centralWidget);
    WidgetDocument->show();@



  • Как получить запущенный экземпляр Excel?
    На VB решается через вызов GetObject("Excel.Application").


Log in to reply