Code in attached file makes TextTable like this:


 

But how i can make table like this:



 

 

Thanks.

<<image003.jpg>>

<<image004.jpg>>

#include <iostream>

#include <cppuhelper/bootstrap.hxx>
#include <rtl/ustring.hxx>

/** === begin UNO includes === **/
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/chart/XChartData.hpp>
#include <com/sun/star/chart/XChartDataArray.hpp>
#include <com/sun/star/chart/XChartDocument.hpp>
#include <com/sun/star/document/XEmbeddedObjectSupplier.hpp>
#include <com/sun/star/frame/XComponentLoader.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/sheet/XCellRangeData.hpp>
#include <com/sun/star/sheet/XCellRangeData.hpp>
#include <com/sun/star/table/XCell.hpp>
#include <com/sun/star/table/XTableRows.hpp>
#include <com/sun/star/text/ControlCharacter.hpp>
#include <com/sun/star/text/TableColumnSeparator.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/text/XTextTable.hpp>
#include <com/sun/star/text/XTextTableCursor.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
/** === end UNO includes === **/

/** === begin UNO using === **/
using ::com::sun::star::beans::PropertyValue;
using ::com::sun::star::beans::XPropertySet;
using ::com::sun::star::chart::XChartData;
using ::com::sun::star::chart::XChartDataArray;
using ::com::sun::star::chart::XChartDocument;
using ::com::sun::star::document::XEmbeddedObjectSupplier;
using ::com::sun::star::frame::XComponentLoader;
using ::com::sun::star::lang::XComponent;
using ::com::sun::star::lang::XMultiComponentFactory;
using ::com::sun::star::lang::XMultiServiceFactory;
using ::com::sun::star::sheet::XCellRangeData;
using ::com::sun::star::sheet::XCellRangeData;
using ::com::sun::star::table::XCell;
using ::com::sun::star::table::XTableRows;
using ::com::sun::star::text::TableColumnSeparator;
using ::com::sun::star::text::XText;
using ::com::sun::star::text::XTextContent;
using ::com::sun::star::text::XTextCursor;
using ::com::sun::star::text::XTextDocument;
using ::com::sun::star::text::XTextTable;
using ::com::sun::star::text::XTextTableCursor;
using ::com::sun::star::uno::Any;
using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::RuntimeException;
using ::com::sun::star::uno::Sequence;
using ::com::sun::star::uno::UNO_QUERY_THROW;
using ::com::sun::star::uno::UNO_QUERY_THROW;
using ::com::sun::star::uno::XComponentContext;
using ::com::sun::star::uno::XInterface;
using ::com::sun::star::uno::makeAny;
/** === end UNO using === **/

using namespace std;
using rtl::OUString;
namespace ControlCharacter = ::com::sun::star::text::ControlCharacter;

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_THROW );

        // 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_THROW );

        // create a text table
        Reference< XTextTable > rTextTable ( rDocFactory->createInstance(
                OUString( RTL_CONSTASCII_USTRINGPARAM( 
"com.sun.star.text.TextTable" ) ) ),
                                             UNO_QUERY_THROW );
        // initalize it with 5 rows and 6 columns
        rTextTable->initialize( sal_Int32( 5 ), sal_Int32( 6 ) );

        // insert it in the document
        rText->insertTextContent( rTextCursor->getEnd(), ( Reference< 
XTextContent > & ) rTextTable , sal_False );

        // data
        OUString ustrJan ( RTL_CONSTASCII_USTRINGPARAM( "January" ) );
        OUString ustrFeb ( RTL_CONSTASCII_USTRINGPARAM( "February" ) );
        OUString ustrMar ( RTL_CONSTASCII_USTRINGPARAM( "March" ) );
        OUString ustrApr ( RTL_CONSTASCII_USTRINGPARAM( "April" ) );
        OUString ustrMay ( RTL_CONSTASCII_USTRINGPARAM( "May" ) );

        OUString ustrJohn ( RTL_CONSTASCII_USTRINGPARAM( "John" ) );
        OUString ustrPaula ( RTL_CONSTASCII_USTRINGPARAM( "Paula" ) );
        OUString ustrAlan ( RTL_CONSTASCII_USTRINGPARAM( "Alan" ) );
        OUString ustrDean ( RTL_CONSTASCII_USTRINGPARAM( "Dean" ) );

        Any aRow0[6] = { Any(), makeAny( ustrJan ), makeAny( ustrFeb ), 
makeAny( ustrMar ), makeAny( ustrApr ), makeAny( ustrMay ) };
        Any aRow1[6] = { makeAny( ustrJohn ),  makeAny( 5.4 ), makeAny( 6.4 ), 
makeAny( 3.4 ), makeAny( 5.6 ), makeAny( 9.4 ) };
        Any aRow2[6] = { makeAny( ustrPaula ), makeAny( 7.8 ), makeAny( 4.5 ), 
makeAny( 7.0 ), makeAny( 6.1 ), makeAny( 6.1 ) };
        Any aRow3[6] = { makeAny( ustrAlan ),  makeAny( 3.4 ), makeAny( 6.3 ), 
makeAny( 4.7 ), makeAny( 5.4 ), makeAny( 3.4 ) };
        Any aRow4[6] = { makeAny( ustrDean ),  makeAny( 6.7 ), makeAny( 5.2 ), 
makeAny( 5.4 ), makeAny( 6.1 ), makeAny( 4.1 ) };

        Sequence< Sequence< Any > > aDataArray( 5 );
        aDataArray[0] = Sequence< Any > ( aRow0, 6 );
        aDataArray[1] = Sequence< Any > ( aRow1, 6 );
        aDataArray[2] = Sequence< Any > ( aRow2, 6 );
        aDataArray[3] = Sequence< Any > ( aRow3, 6 );
        aDataArray[4] = Sequence< Any > ( aRow4, 6 );

        Reference< XCellRangeData > rCellRangeData ( rTextTable, 
UNO_QUERY_THROW );
        rCellRangeData->setDataArray( aDataArray );

        Reference< XPropertySet > rTablePropertySet ( rTextTable, 
UNO_QUERY_THROW );

        sal_Int16 nReltativeSum( 0 );
        rTablePropertySet->getPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM(
                          "TableColumnRelativeSum" ) ) ) >>= nReltativeSum;

        // by default, every column has the same width
        // so every column is 16.6 % of the column relative sum
        // make the first column a 10 %
        sal_Int16 nFirstColumn( nReltativeSum / 10 );
        sal_Int16 nOtherCols( ( nReltativeSum - nFirstColumn ) / 5 );
        sal_Int16 nPosition( nFirstColumn );

        Sequence< TableColumnSeparator > aColSeparators( 5 );
        aColSeparators[0].Position = nPosition;
        aColSeparators[0].IsVisible = sal_True;
        aColSeparators[1].Position = nPosition += nOtherCols;
        aColSeparators[1].IsVisible = sal_True;
        aColSeparators[2].Position = nPosition += nOtherCols;
        aColSeparators[2].IsVisible = sal_True;
        aColSeparators[3].Position = nPosition += nOtherCols;
        aColSeparators[3].IsVisible = sal_True;
        aColSeparators[4].Position = nPosition += nOtherCols;
        aColSeparators[4].IsVisible = sal_True;

        rTablePropertySet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "TableColumnSeparators" ) ),
            makeAny( aColSeparators ) );

        /**
        Determines if the first row of the table
        should be treated as axis labels when a chart is to be created.
        */
        rTablePropertySet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "ChartRowAsLabel" ) ), Any( 
sal_True ) );
        /**
        Determines if the first column of the table
        should be treated as axis labels when a chart is to be created.
        */
        rTablePropertySet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "ChartColumnAsLabel" ) ), 
Any( sal_True ) );

        Reference< XTableRows > rTableRows = rTextTable->getRows();
        // get the first linen (index == 0), and its XPropertySet to change its 
properties
        Reference< XPropertySet > rCellProps ( rTableRows->getByIndex( 
sal_Int32( 0 ) ), UNO_QUERY_THROW );
        rCellProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( 
"BackTransparent" ) ), Any( sal_False ) );
        rCellProps->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( 
"BackColor" ) ), makeAny( sal_Int32( 16744576 ) ) );


        // create an embedded object
        // get its XTextContent interface
        Reference< XTextContent > rTextContent (
            rDocFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM(
                                             
"com.sun.star.text.TextEmbeddedObject" ) ) ), UNO_QUERY_THROW );
        // and its XPropertySet
        Reference< XPropertySet > rPropertySet ( rTextContent, UNO_QUERY_THROW 
);

        // the type of embedded object is determined by the property named 
"CLSID"
        rPropertySet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "CLSID" ) ),
            makeAny( OUString( RTL_CONSTASCII_USTRINGPARAM(
                                   "12DCAE26-281F-416F-a234-c3086127382e" ) ) ) 
);
        // set its Width and Height
        rPropertySet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "Width" ) ), makeAny( 
sal_Int32( 12000 ) ) );
        rPropertySet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "Height" ) ), makeAny( 
sal_Int32( 7000 ) ) );

        rTextCursor->gotoEnd( sal_False );
        // insert a paragraph brake
        rText->insertControlCharacter(
            rTextCursor->getEnd(), ControlCharacter::PARAGRAPH_BREAK, sal_False 
);
        // insert the text content
        rText->insertTextContent( rTextCursor->getEnd(), rTextContent, 
sal_False );

        // access the component of the embedded object
        Reference< XEmbeddedObjectSupplier > rEmbeddedObjectSupplier ( 
rTextContent, UNO_QUERY_THROW );
        Reference< XComponent > rEmbeddedObjectComponent = 
rEmbeddedObjectSupplier->getEmbeddedObject();


        Reference< XPropertySet > rChartProperties ( rEmbeddedObjectComponent, 
UNO_QUERY_THROW );

        rChartProperties->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( 
"DataSourceLabelsInFirstColumn" ) ), Any( sal_False ) );
        rChartProperties->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "DataSourceLabelsInFirstRow" 
) ), Any( sal_True ) );
        rChartProperties->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "HasMainTitle" ) ), Any( 
sal_True ) );
        rChartProperties->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "HasSubTitle" ) ), Any( 
sal_True ) );
        rChartProperties->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "HasLegend" ) ), Any( 
sal_True ) );

        Reference< XChartDocument > rChartDocument ( rEmbeddedObjectComponent, 
UNO_QUERY_THROW );

        Reference< XPropertySet > rPropSet ( rChartDocument->getTitle(), 
UNO_QUERY_THROW );
        rPropSet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "String" ) ),
            makeAny( OUString( RTL_CONSTASCII_USTRINGPARAM( "January-May" ) ) ) 
);

        rPropSet = Reference< XPropertySet >( rChartDocument->getSubTitle(), 
UNO_QUERY_THROW );
        rPropSet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "String" ) ),
            makeAny( OUString( RTL_CONSTASCII_USTRINGPARAM( "Old API Chart Test 
" ) ) ) );

        rPropSet = Reference< XPropertySet >( rChartDocument->getDiagram(), 
UNO_QUERY_THROW );
        rPropSet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "Dim3D" ) ), Any( sal_True ) 
);
        rPropSet->setPropertyValue(
            OUString( RTL_CONSTASCII_USTRINGPARAM( "HasYAxisGrid" ) ), Any( 
sal_True ) );

        Reference< XChartData > rChartData = rChartDocument->getData();

        Reference< XChartDataArray > rChartDataArray ( rChartData, 
UNO_QUERY_THROW );

        // get table data as Sequence< Sequence<double> >
        Reference< XChartDataArray > rTableDataArray ( rTextTable, 
UNO_QUERY_THROW );
        Sequence< Sequence<double> > aTableData = rTableDataArray->getData();

        rChartDataArray->setData( aTableData );

        Sequence<OUString> aMonths( 5 );
        aMonths[0] = ustrJan;
        aMonths[1] = ustrFeb;
        aMonths[2] = ustrMar;
        aMonths[3] = ustrApr;
        aMonths[4] = ustrMay;
        rChartDataArray->setColumnDescriptions( aMonths );

        Sequence<OUString> aPersons( 4 );
        aPersons[0] = ustrJohn;
        aPersons[1] = ustrPaula;
        aPersons[2] = ustrAlan;
        aPersons[3] = ustrDean;
        rChartDataArray->setRowDescriptions( aPersons );


        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;
}



---------------------------------------------------------------------
To unsubscribe, e-mail: api-unsubscr...@openoffice.apache.org
For additional commands, e-mail: api-h...@openoffice.apache.org

Reply via email to