OpenOffice API

 ( martonmiklos | 2011. március 18., péntek - 23:46 )

A problémám a következő:
Van egy xls táblázatom, amiből adatokat kellene kinyernem. Ha le tudnám kérdezni hogy egy munkalapon hány sor oszlop van illetve egy adott cella értéket le tudom kérdezni, plusz tudnék munkalapot váltani akkor boldog ember lennék.

Leggyorsabban prototypolni Qt/C++ segítségével tudok, ezért kézenfekvő lenne azzal csinálnom, hogy ne kelljen pld. pythonnal/ akármivel a kkezdeti szopókákat végigjátszani.

Első nekifutásra az excel tűnt a legkézenfekvőbbnek a COM-on keresztül azonban, a sorok számának lekérdezése feladata a leckét, így azt a vonalat feladtam.
http://www.qtforum.org/article/22557/activeqt-excel.html // ld. similarly, always returns kommeneteket

Eztán került sorra az OpenOffice API.
Feltettem az SDK-t ubuntu csomagokból, a gyári example pörgetése után ezt produkálja:
http://www.oooforum.org/forum/viewtopic.phtml?t=117033

Mivel nekem calcot kellene cseszegetnem, ezért orcámat a calcos example felé fordítottam:
http://wiki.services.openoffice.org/wiki/Calc/API/Programming#Introduction

Ezzel már tovább jutottam, már ha előbbrelépésnek számít az, ha sikerül az ooo-hoz csatlakozni.
A kódot összeollózva a következőbe szaladtam bele:

  Sequence< ::com::sun::star::beans::PropertyValue > loadProps; // empty sequence

//get an instance of the spreadsheet
    Reference< XComponent > xcomponent = rComponentLoader->loadComponentFromURL(
	OUString::createFromAscii("private:factory/scalc"),
        OUString::createFromAscii("_blank"),
        0,
        loadProps);

A fentebbi kódrészlet a következővel száll el:

Starting program: /media/large_part/home/mm/Projektek/ooosdk/openoffice.org3.2_sdk/LINUXexample.out/bin/DocumentLoader 
[Thread debugging using libthread_db enabled]
[New Thread 0x7ffff5f77700 (LWP 6688)]
[New Thread 0x7ffff31b0700 (LWP 6693)]
[New Thread 0x7ffff29af700 (LWP 6694)]
[New Thread 0x7ffff21ae700 (LWP 6695)]
[Thread 0x7ffff21ae700 (LWP 6695) exited]
Connected sucessfully to the office
XComponentloader successfully instanciated
Program received signal SIGILL, Illegal instruction.
0x0000000000403db9 in main () at DocumentLoader.cxx:169
169	  Sequence< ::com::sun::star::beans::PropertyValue > loadProps; // empty sequence
(gdb) bt
#0  0x0000000000403db9 in main () at DocumentLoader.cxx:169

Kérdéseim:
Próbálkozott-e valaki már c++-ből OOO apit hasznnálni?
Ha igen megéri-e vele foglalkozni?
Ha nem akkor más nyelvi (CLI/pyhon/akármi ami lehetőleg egyszerűen, gyorsan megszokható) API-ja szintén ilyen trágya?

Várhatok-e javulást attól ha lefrissítem a legújabb ooo-ra a csomagjaimat valami ppa-ból?
Mostanában mindenki valami libreoffice-ot hypol. Ha jól veszem le az valami kisebb bikeshedfestés eredménye, ha átálok arra, várhatok e valamilyen szintű javulást, azaz van a téma mögött effektív kódolás vagy csak egy átbrandelt ooo más licenszekkel?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Wáhh. Lefrissítettem az OOO-t 3.2-re így a DocumentLoader example megy faszányosan. Megyek elteszem magam holnapra.