Использование activeqt
От: vali-ali  
Дата: 25.08.11 11:27
Оценка:
Доброго времени суток!

Использую QAxWidget и QAxObject для автоматизации MS Office Word.
Мне необходимо открыть word в QAxWidget, это проше всего
QAxWidget *WordDocument=new QAxWidget("Word.Document",this->ui->centralWidget);
WordDocument->setGeometry(QRect(410, 10, 421, 271));
WordDocument->show();

или
QAxWidget *WordDocument=new QAxWidget(this->ui->centralWidget);
WordDocument->setGeometry(QRect(410, 10, 421, 271));
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()");
...

Вот тут понятно что Application будет работать не адекватно, и я решил воспользоваться 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 в своем окне?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.