Здравствуйте! Стоит задача вытащить текст из презентации PowerPoint. Делаю так:
mPowerPoint = new QAxObject("PowerPoint.Application", this);
QString path("Hello.ppt");
QAxObject *presentations = mPowerPoint->querySubObject("Presentations");
QAxObject *presentation = presentations->querySubObject("Open(const QString&)", path);
QAxObject *slides = presentation->querySubObject("Slides" );
int iColPages = slides->property("Count").toInt(); //кол-во слайдов
//перебираем слайды
for (int iPage = 1; iPage <= iColPages; iPage++) {
QAxObject *slide = slides->querySubObject("Item(const QVariant&)", QVariant(iPage) );
QAxObject *shapes = slide->querySubObject("Shapes");
int iColItems = shapes->property("Count").toInt(); //кол-во элементов (вместе с заголовком)
//перебираем элементы на слайде
for (int iItem = 1; iItem < iColItems; iItem++ ) {
//берем элемент
QAxObject *item = shapes->querySubObject("Item(const QVariant&)", QVariant(iItem));
//проверяем тип элемента
if ([color=red][b]item->property("HasTextFrame").toBool()[/b][/color]) {
//вытаскиваем текст из элементов
QAxObject *textFrame = item->querySubObject("TextFrame");
QAxObject *textRange = textFrame->querySubObject("TextRange");
QString val = textRange->property("Text").toString();
}
}
}
Программа запускается, но условие не работает так как нужно. Поле
HasTextFrame имеет тип
Office::MsoTriState и QT Creator пишет в консоли:
QMetaProperty::read: Unable to handle unregistered datatype 'Office::MsoTriState' for property 'QAxObject::HasTextFrame'
В сгенерированной справке по объекту Shape написанно:
Office::MsoTriState HasTextFrame
This property is of an unsupported type.
Как подружить QT c
Office::MsoTriState?
Извините, если вопрос глупый, на QT раньше ничего не писал и с Activex не работал. Также буду рад замечаниям по остальному коду. Может, есть более правильные способы?