Использование 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
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.