Russian Qt Forum

Qt => ActiveX => Тема начата: vvvxmag от Март 24, 2013, 16:58



Название: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: vvvxmag от Март 24, 2013, 16:58
Нигде не смог найти информации о том как правильно пользоваться данной структурой
создаю объект со структурой
QAxObject *propValue = OO->querySubObject("Bridge_GetStruct(string)", QString("com.sun.star.beans.PropertyValue"));

структура состоит из четырех полей
Код:
Elements' Summary
Name         specifies the name of the property. 
Handle contains an implementation-specific handle for the property. 
Value         contains the value of the property or void, if no value is available. 
State         determines if the value comes from the object itself or from a default and if the value cannot be determined exactly. 
http://www.openoffice.org/api/docs/common/ref/com/sun/star/beans/PropertyValue.html#Name

Стоит вопрос в том как ее заполнить?

А вообще у меня вопрос как сохранить открытый в Calc файл в формате Excel.


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: PavelVX от Июль 31, 2013, 09:05
ТС, разобрался с вопросом-то?
Тоже интресует!


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Kurles от Июль 31, 2013, 18:11
У нас в проекте так и не удалось использовать  QACtiveX для работы с апи OO, пришлось пользовать стороннюю библиотеку disphelper (http://disphelper.sourceforge.net/readme.htm)
Код
C++ (Qt)
bool getPropertyValue(void *pResult)
{
   try {
       dhCheck(dhGetValue(L"o", pResult, m_serviceManager, L"Bridge_GetStruct(%S)", L"com.sun.star.beans.PropertyValue"));
       return true;
   } catch (std::string str) {
       std::cerr << str << std::endl;
       return false;
   }
}
 
CDispPtr propValue;
getPropertyValue(&propValue);
dhCheck(dhPutValue(propValue, L"Name = %S", L"Author"));
dhCheck(dhPutValue(propValue, L"Value = %S", L"Anonimous"));


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: PavelVX от Август 02, 2013, 12:51
Ну совсем простенькие вещи-то я сделал. Вставка, форматирование. Уперся в рисование границ. Перерыл инфу в инете, походу это никто не победил, все переходили на голимый oo.api :(.
Никогда такого не далал, поэтому задам возможно глупый вопрос: для работы с oo.api мне нужно качать SDK OO или эватит штатных средств Qt?
Уважаемые, а есть у кого-нить простенький пример: положить значение в ячейку 1,1, но с использованием oo.api?
Без использования сторонних библиотек.


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Alex Custov от Октябрь 31, 2013, 16:58
Ну совсем простенькие вещи-то я сделал.

Можно простейший пример как подключиться к запущенному Calc и считать ячейку A1?


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: panAlexey от Ноябрь 04, 2013, 22:08
Ну совсем простенькие вещи-то я сделал.

Можно простейший пример как подключиться к запущенному Calc и считать ячейку A1?
http://kb.mista.ru/article.php?id=574
это работа из 1С с кальком. считайте что бейсик. разберетесь?


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Alex Custov от Ноябрь 05, 2013, 12:11
это работа из 1С с кальком. считайте что бейсик. разберетесь?

Я видел аналогичные примеры, но преобразовать в код ActiveQt у меня не получилось. Примеров кода ActiveQt+OO в гугле не нашёл вообще кроме двух тем на прогорге :o


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Kurles от Ноябрь 05, 2013, 13:41
это работа из 1С с кальком. считайте что бейсик. разберетесь?

Я видел аналогичные примеры, но преобразовать в код ActiveQt у меня не получилось. Примеров кода ActiveQt+OO в гугле не нашёл вообще кроме двух тем на прогорге :o
Если нужно, то могу пример реализованный с помощью библиотеки disphelper дать.


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Alex Custov от Ноябрь 05, 2013, 13:48
Если нужно, то могу пример реализованный с помощью библиотеки disphelper дать.

Я видел код в соседней ветке, это пока как самый последний вариант. Я бы хотел на Qt, т.к. в последствии мне нужно будет цеплять сигналы из Calc.


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Alex Custov от Ноябрь 06, 2013, 15:39
Путём проб и ошибок и попыток превратить Basic в ActiveQt пришёл к решению (без особых проверок, которые потом нужно добавить):

Код
C++ (Qt)
QAxObject *m_calc = new QAxObject("com.sun.star.ServiceManager", this);
qDebug() << (!m_calc || m_calc->isNull() ? "NULL" : "OK");
 
QAxObject *desktop = m_calc->querySubObject("createInstance(const QString&)", "com.sun.star.frame.Desktop");
qDebug() << (!desktop || desktop->isNull() ? "NULL" : "OK");
 
QAxObject *doc = desktop->querySubObject("getCurrentComponent()");
qDebug() << (!doc || doc->isNull() ? "NULL" : "OK");
 
QAxObject *sheets = doc->querySubObject("getSheets()");
qDebug() << (!sheets || sheets->isNull() ? "NULL" : "OK");
 
QVariant v = sheets->dynamicCall("getCount()");
qDebug() << v;
 
QAxObject *sheet = sheets->querySubObject("getByName(const QString&)", "w1");
qDebug() << (!sheet || sheet->isNull() ? "NULL" : "OK");
 
QAxObject *cell = sheet->querySubObject("getCellByPosition(long, long)", 2, 2);
qDebug() << (!cell || cell->isNull() ? "NULL" : "OK");
 
v = cell->dynamicCall("getString()");
qDebug() << v;

Печатает:

Цитировать
OK
OK
OK
OK
QVariant(int, 3)
OK
OK
QVariant(QString, "RedHat")

Правда оказалось, что с сигналами косяк - они просто не поддерживаются, либо поддерживаются через ужасные костыли (http://www.oooforum.org/forum/viewtopic.phtml?p=234516#234516).


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: panAlexey от Ноябрь 07, 2013, 16:41
А какая задача стояла в целом?


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Alex Custov от Ноябрь 07, 2013, 17:33
А какая задача стояла в целом?

подключиться к запущенному Calc/Excel и следить за изменением заданной ячейки. С Excel всё нормально, а с Calc косяк. Есть надежда на UniOffice, но это платно.


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Johnik от Ноябрь 14, 2013, 13:20
Правда оказалось, что с сигналами косяк - они просто не поддерживаются, либо поддерживаются через ужасные костыли (http://www.oooforum.org/forum/viewtopic.phtml?p=234516#234516).

С подобными костылями разбираюсь в другом COM объекте. Где можно посмотреть на интерфейсы OO, чтоб сравнить?


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Alex Custov от Ноябрь 14, 2013, 15:16
С подобными костылями разбираюсь в другом COM объекте. Где можно посмотреть на интерфейсы OO, чтоб сравнить?

В оф.документации http://www.openoffice.org/api/


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Johnik от Ноябрь 14, 2013, 23:32
Можно конкретно указать интерфейс для которого не поддерживаются сигналы (или с проблемами)?

Документация сильно разрозненная. При беглом осмотре документация LibreOffice мне показалась более качественной.


Название: Re: OpenOffice, как пользоваться "com.sun.star.beans.PropertyValue"?
Отправлено: Alex Custov от Ноябрь 15, 2013, 00:23
Можно конкретно указать интерфейс для которого не поддерживаются сигналы (или с проблемами)?

Если имеются ввиду события, то они не поддерживаются вообще из-за ограниченности реализации COM в OO. В Excel можно написать так: http://www.prog.org.ru/index.php?topic=25742.msg184349#msg184349 . В OO нельзя.