Hello Ariel,

I'm some steps higher:-)

But something strange happens...

I can compile your demo but I can see the string in the XCell ("This works!")
only two times. 
All other runs of the demo bring OOo to hang;()

Without any modifications on the source!

The same in my code...

The code, that cause the "hanging":

------ snip
Reference< XComponent > rEmbeddedObjectComponent = 
rEmbeddedObjectSupplier->getEmbeddedObject();
------

I'm using OOoSDK2.0 and OOo 2.0.4 on suse linux 10.2...
May be, my SDK or linux is broken...

I got following warning from "ld":

/usr/bin/ld: warning: libstdc++.so.6, needed 
by /opt/openoffice.org2.0/program/libcppu.so, may conflict with 
libstdc++.so.5

I ignore that, it's generally a problem in our project. We must use
for some libs libstdc++.so.5;-\

The comic is, that the code works in some cases without any modifications.
When OOo hangs I must kill all "soffice.bin" manually. 

At this time I'm very confused, but I don't surrender:-)


Best regards

Andre



Am Montag, 11. Februar 2008 21:01 schrieb Andre Heine:
> Hi Andre, Peter, *,
>
> Peter Eberlein escribió:
> > Hi Andre,
> >
> > Andre Heine schrieb:
> >> Ok, the next problem...
> >>
> >> Am Montag, 11. Februar 2008 15:37 schrieb Andre Heine:
> >>
> >>
> >> Ok, I can see the SpreadsheetDocument in my writer, but how can I
> >> access them?
> >>
> >> XTextContent has not any methods like getObject() or setObject()?
> >>
> >> How can I get the Object from XTextContent?
> >
> > An untested Java snippet:
> >
> > XTextEmbeddedObjectsSupplier xes = (XTextEmbeddedObjectsSupplier)
> > UnoRuntime.queryInterface(XTextEmbeddedObjectsSupplier.class, document);
> >
> > XNameAccess xna = xes.getEmbeddedObjects();
> >
> > if (xna.hasByName("Objekt1")) {
> >     XEmbeddedObjectSupplier xeo;
> >     try {
> >         embeddedObject
> > =(XTextContent)UnoRuntime.queryInterface(XTextContent.class,
> > xna.getByName("Objekt1"));
> >         xeo = (XEmbeddedObjectSupplier)
> > UnoRuntime.queryInterface(XEmbeddedObjectSupplier.class, embeddedObject);
> >         XComponent xComponent = xeo.getEmbeddedObject();
> >
> >
> > and so on...
>
> there is no need to browse all the embedded object collection of the
> document, and get it by name: you have already inserted it, so use
> XEmbeddedObjectSupplier, as follows:
>
>
> //*******************************************************************
> #include <iostream>
>
> #include <cppuhelper/bootstrap.hxx>
> #include <rtl/ustring.hxx>
>
> #include <com/sun/star/beans/PropertyValue.hpp>
> #include <com/sun/star/beans/XPropertySet.hpp>
> #include <com/sun/star/container/XIndexAccess.hpp>
> #include <com/sun/star/document/XEmbeddedObjectSupplier.hpp>
> #include <com/sun/star/frame/XComponentLoader.hpp>
> #include <com/sun/star/lang/XMultiComponentFactory.hpp>
> #include <com/sun/star/lang/XMultiServiceFactory.hpp>
> #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
> #include <com/sun/star/sheet/XSpreadsheet.hpp>
> #include <com/sun/star/sheet/XSpreadsheets.hpp>
> #include <com/sun/star/table/XCell.hpp>
> #include <com/sun/star/table/XCellRange.hpp>
> #include <com/sun/star/text/ControlCharacter.hpp>
> #include <com/sun/star/text/XText.hpp>
> #include <com/sun/star/text/XTextContent.hpp>
> #include <com/sun/star/text/XTextCursor.hpp>
> #include <com/sun/star/text/XTextDocument.hpp>
> #include <com/sun/star/uno/XComponentContext.hpp>
>
> using namespace std;
> using namespace rtl;
> using namespace com::sun::star::beans;
> using namespace com::sun::star::container;
> using namespace com::sun::star::document;
> using namespace com::sun::star::frame;
> using namespace com::sun::star::lang;
> using namespace com::sun::star::sheet;
> using namespace com::sun::star::table;
> using namespace com::sun::star::text;
> using namespace com::sun::star::uno;
>
>
> int SAL_CALL main( int argc, char* argv[] ) {
>         try {
>                 // bootstrap the office
>                 Reference< XComponentContext > rContext (
> ::cppu::bootstrap() );
>
>                 Reference< XMultiComponentFactory >     rMCF =
> rContext->getServiceManager();
>
>                 // instantiate the Desktop and get a reference to
> XComponentLoader Reference < XComponentLoader > rComponentLoader(
>                         rMCF->createInstanceWithContext( OUString(
> RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ), rContext ),
> UNO_QUERY_THROW );
>
>                 // load a new empty OOo Writer document
>                 Reference< XTextDocument > rTextDocument (
>                         rComponentLoader->loadComponentFromURL(
>                         OUString( RTL_CONSTASCII_USTRINGPARAM(
> "private:factory/swriter" ) ), OUString( RTL_CONSTASCII_USTRINGPARAM(
> "_blank" ) ), 0,
>                         Sequence < ::com::sun::star::beans::PropertyValue
> >() ), UNO_QUERY );
>
>                 // get the XText interface
>                 Reference< XText > rText = rTextDocument->getText();
>
>                 // create a text cursor
>                 Reference< XTextCursor > rTextCursor =
> rText->createTextCursor(); rTextCursor->gotoStart( sal_False );
>                 // insert a paragraph brake
>                 rText->insertControlCharacter(
>                         rTextCursor->getEnd(),
> ControlCharacter::PARAGRAPH_BREAK, sal_False);
>
>                 // get the document's factory
>                 Reference< XMultiServiceFactory > rDocFactory (
> rTextDocument, UNO_QUERY );
>
>                 // create an embedded object
>                 // get its XTextContent interface
>                 Reference< XTextContent > rTextContent (
>                         rDocFactory->createInstance( OUString(
> RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.text.TextEmbeddedObject" ) ) ),
> UNO_QUERY ); // and its XPropertySet
>                 Reference< XPropertySet > rPropertySet ( rTextContent,
> UNO_QUERY );
>
>                 // the type of embedded object is determined by the
> property named "CLSID" rPropertySet->setPropertyValue(
>                         OUString( RTL_CONSTASCII_USTRINGPARAM( "CLSID" ) ),
>                         makeAny( OUString( RTL_CONSTASCII_USTRINGPARAM(
>                                         "47BBB4CB-CE4C-4E80-a591-42d9ae7495
>0f" ) ) ) );
>
>                 // insert the text content
>                 rText->insertTextContent( rTextCursor->getEnd(),
> rTextContent, sal_False );
>
>                 // access the component of hte embedded object
>                 Reference< XEmbeddedObjectSupplier >
> rEmbeddedObjectSupplier ( rTextContent, UNO_QUERY );
>                 Reference< XComponent > rEmbeddedObjectComponent =
> rEmbeddedObjectSupplier->getEmbeddedObject();
>
>                 // this component is an XSpreadsheetDocument
>                 Reference< XSpreadsheetDocument > rSpreadsheetDocument (
> rEmbeddedObjectComponent, UNO_QUERY);
>
>                 // nevertheless, let's be sure...
>                 if ( !rSpreadsheetDocument.is() )
>                 {
>                         cout << "Impossible to get the spreadsheet
> document!" << endl; return 1;
>                 }
>
>                 // get the collection of sheets in the document
>                 Reference< XSpreadsheets > rSheets =
> rSpreadsheetDocument->getSheets();
>
>                 // XIndexAccess to get an spreadsheet by index
>                 Reference< XIndexAccess > rIndexedSheets( rSheets,
> UNO_QUERY );
>
>                 // get the first sheet (index == 0)
>                 // as XIndexAccess::getByIndex() returns an any
>                 // we can query for a reference, like we do in Java
>                 // Reference< XSpreadsheet > rSpreadsheet(
> rIndexedSheets->getByIndex( sal_Int32( 0 ) ), UNO_QUERY );
>                 // but using the operator>>= is easier
>                 Reference< XSpreadsheet > rSpreadsheet;
>                 rIndexedSheets->getByIndex( sal_Int32( 0 ) ) >>=
> rSpreadsheet;
>
>                 // get the cell named A1
>                 Reference< XCell > rCellA1 =
> rSpreadsheet->getCellByPosition( sal_Int32( 0 ),  sal_Int32( 0 ) );
>
>                 // set a very long text
>                 rCellA1->setFormula( OUString::createFromAscii("This
> works!") );
>
>                 cout << "Press ENTER to finish the example";
>                 cin.get();
>         } catch ( Exception& e ) {
>                 cerr << "caught UNO exception: "
>                         << OUStringToOString( e.Message,
> RTL_TEXTENCODING_ASCII_US ).getStr() << '\n';
>                 return 1;
>         }
>         return 0;
> }
> //*******************************************************************
>
>
> As row C++ code is awful and hard to read in a mail, here
>
>
> http://www.ArielConstenlaHaile.com.ar/ooo/temp/TextEmbeddedObject_CalcDemo.
>zip
>
> is a ready to build and run version, just place the folder
> TextEmbeddedObject_CalcDemo inside $OO_SDK_HOME/examples/cpp/ or simply
> run make overriding the variable PRJ in the command line as follows:
>
> shell> make PRJ=$OO_SDK_HOME
>
> where $OO_SDK_HOME is the path to the SDK root directory, for example
>
> shell> make PRJ=/opt/openoffice.org2.3_sdk/
>
> In every case you MUST run FIRST the script setsdkenv_XXX on the SDK
> home dir. to set your environment.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to