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]