diff options
author | Akash Shetye <shetyeakash@gmail.com> | 2013-07-23 01:55:56 +0530 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-08-05 14:30:24 -0400 |
commit | 165114a4b0f17f38e9b90998891ac878e306e470 (patch) | |
tree | f560663c3826467fc42c2e931d53a6c8af29adaf | |
parent | b28688b74ad8ab8d3d4d11bab01d000c559811d2 (diff) |
Completed the export of table formatting data to excel.
The patch has not yet been tested nicely, improvements will come soon. The basics are all in place though. Will be doing the export of DB Ranges as well.
Change-Id: I237b0311ed2247f8fd884545e9a5741c60ea9242
-rw-r--r-- | sc/source/filter/excel/xeroot.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/excel/xestyle.cxx | 92 | ||||
-rw-r--r-- | sc/source/filter/inc/xestyle.hxx | 14 |
3 files changed, 96 insertions, 12 deletions
diff --git a/sc/source/filter/excel/xeroot.cxx b/sc/source/filter/excel/xeroot.cxx index 9df6afecddca..31ad08bbd678 100644 --- a/sc/source/filter/excel/xeroot.cxx +++ b/sc/source/filter/excel/xeroot.cxx @@ -212,7 +212,7 @@ void XclExpRoot::InitializeGlobals() // BIFF8: only one link manager for all sheets mrExpData.mxLocLinkMgr = mrExpData.mxGlobLinkMgr; mrExpData.mxDxfs.reset( new XclExpDxfs( GetRoot() ) ); - mrExpData.mxTableStyles.reset( new XclExpTableStyles( GetRoot() ) ); + mrExpData.mxTableStyles.reset( new XclExpTableStyles( GetRoot(), GetDxfs() ) ); } if( GetOutput() == EXC_OUTPUT_XML_2007 ) diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx index a1a7341f384e..028678c6e248 100644 --- a/sc/source/filter/excel/xestyle.cxx +++ b/sc/source/filter/excel/xestyle.cxx @@ -3134,8 +3134,8 @@ void XclExpDxf::SaveXml( XclExpXmlStream& rStrm ) XclExpTableStyleElement::XclExpTableStyleElement( const XclExpRoot& rRoot, OUString& rType, int iSize, int iDxfId ) :XclExpRoot( rRoot), maType( rType ), - maDxfId( iDxfId ), - maSize( iSize ) + miSize( iSize ), + miDxfId( iDxfId ) { } @@ -3143,16 +3143,54 @@ XclExpTableStyleElement::~XclExpTableStyleElement() { } -void XclExpTableStyleElement::SaveXml( XclExpStream& rStrm ) +void XclExpTableStyleElement::SaveXml( XclExpXmlStream& rStrm ) { + sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream(); + rStyleSheet->singleElement( XML_tableStyleElement, + XML_type, OUStringToOString(maType, RTL_TEXTENCODING_UTF8 ).getStr(), + XML_size, OString::number(miSize).getStr(), + XML_dxfId, OString::number(miDxfId).getStr(), + FSEND ); } // ============================================================================ -XclExpTableStyle::XclExpTableStyle( const XclExpRoot& rRoot, OUString& rTableStyleName ) +XclExpTableStyle::XclExpTableStyle( const XclExpRoot& rRoot, ScDBDataFormatting& rTableStyle, XclExpDxfs& rDxfs ) :XclExpRoot( rRoot ), - maTableStyleName( rTableStyleName ) + maTableStyle( rTableStyle ) { + //Get the table style name + maTableStyleName = maTableStyle.GetTableStyleName(); + //Keep adding table style elements + OUString aStyleString; + OUString aElementType; + int aiDxfId; + if( !(aStyleString = maTableStyle.GetFirstRowStripeStyle()).isEmpty() ) + { + //Resolve this string style sheet name to a dxf id + aiDxfId = rDxfs.GetDxfId( aStyleString ); + aElementType = "firstRowStripe"; + maStyleElementContainer.push_back( new XclExpTableStyleElement( rRoot, aElementType, 1, aiDxfId ) ); + } + if( !(aStyleString = maTableStyle.GetSecondRowStripeStyle()).isEmpty() ) + { + aiDxfId = rDxfs.GetDxfId( aStyleString ); + aElementType = "secondRowStripe"; + maStyleElementContainer.push_back( new XclExpTableStyleElement( rRoot, aElementType, 1, aiDxfId ) ); + } + if( !(aStyleString = maTableStyle.GetFirstColStripeStyle()).isEmpty() ) + { + aiDxfId = rDxfs.GetDxfId( aStyleString ); + aElementType = "firstColumnStripe"; + maStyleElementContainer.push_back( new XclExpTableStyleElement( rRoot, aElementType, 1, aiDxfId ) ); + } + if( !(aStyleString = maTableStyle.GetSecondColStripeStyle()).isEmpty() ) + { + aiDxfId = rDxfs.GetDxfId( aStyleString ); + aElementType = "secondColumnStripe"; + maStyleElementContainer.push_back( new XclExpTableStyleElement( rRoot, aElementType, 1, aiDxfId ) ); + } + miCount = maStyleElementContainer.size(); } XclExpTableStyle::~XclExpTableStyle() @@ -3161,13 +3199,47 @@ XclExpTableStyle::~XclExpTableStyle() void XclExpTableStyle::SaveXml( XclExpXmlStream& rStrm ) { + sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream(); + rStyleSheet->startElement( XML_tableStyle, XML_name, OUStringToOString(maTableStyleName, RTL_TEXTENCODING_UTF8 ).getStr(), XML_count, OString::number(miCount).getStr(), FSEND ); + for ( StyleElementContainer::iterator itr = maStyleElementContainer.begin(); itr != maStyleElementContainer.end(); ++itr ) + { + itr->SaveXml( rStrm ); + } + rStyleSheet->endElement( XML_tableStyle ); } // =========================================================================== -XclExpTableStyles::XclExpTableStyles( const XclExpRoot& rRoot ) +XclExpTableStyles::XclExpTableStyles( const XclExpRoot& rRoot, XclExpDxfs& rDxfs ) :XclExpRoot( rRoot ) { + //Search through the collection of ScDBData (Database Ranges) + //checking for any table styles associated with them + miCount = 0; + ScDBCollection* pDBCollection = rRoot.GetDoc().GetDBCollection(); + //Now iterate through this collection gathering style names + if( pDBCollection ) + { + ScDBCollection::NamedDBs& aNamedDBs = pDBCollection->getNamedDBs(); + ScDBCollection::NamedDBs::iterator itr = aNamedDBs.begin(); + ScDBCollection::NamedDBs::iterator itrEnd = aNamedDBs.end(); + for(; itr!= itrEnd; ++itr) + { + /*Probably have an issue here..looks like the imported DB is + taken into the DBCollection as a named DB, but the DB Range + we define by Data->define range is not classified as a named DB. + I haven't investigated why yet. For now allow me to consider only + the named DBs for table style information. + */ + ScDBDataFormatting aDBFormatting; + (*itr).GetTableFormatting( aDBFormatting ); + if( &(aDBFormatting) )//Probably non-standard? + { + miCount++; + maStyleContainer.push_back( new XclExpTableStyle( rRoot, aDBFormatting, rDxfs ) ); + } + } + } } XclExpTableStyles::~XclExpTableStyles() @@ -3176,6 +3248,13 @@ XclExpTableStyles::~XclExpTableStyles() void XclExpTableStyles::SaveXml( XclExpXmlStream& rStrm ) { + sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream(); + rStyleSheet->startElement( XML_tableStyles, XML_count, OString::number(miCount).getStr(), FSEND ); + for ( StyleContainer::iterator itr = maStyleContainer.begin(); itr != maStyleContainer.end(); ++itr ) + { + itr->SaveXml( rStrm ); + } + rStyleSheet->endElement( XML_tableStyles ); } // ============================================================================ @@ -3204,6 +3283,7 @@ void XclExpXmlStyleSheet::SaveXml( XclExpXmlStream& rStrm ) CreateRecord( EXC_ID_XFLIST )->SaveXml( rStrm ); CreateRecord( EXC_ID_DXFS )->SaveXml( rStrm ); CreateRecord( EXC_ID_PALETTE )->SaveXml( rStrm ); + CreateRecord( EXC_ID_TABLESTYLES )->SaveXml( rStrm ); aStyleSheet->endElement( XML_styleSheet ); diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx index 6f22449a8e0b..a4e6017dedd3 100644 --- a/sc/source/filter/inc/xestyle.hxx +++ b/sc/source/filter/inc/xestyle.hxx @@ -30,6 +30,7 @@ #include "xlstyle.hxx" #include "xeroot.hxx" #include "conditio.hxx" +#include "dbdata.hxx" #include <boost/shared_ptr.hpp> #include <boost/scoped_ptr.hpp> #include <boost/ptr_container/ptr_vector.hpp> @@ -772,34 +773,37 @@ class XclExpTableStyleElement : public XclExpRecordBase, protected XclExpRoot public: XclExpTableStyleElement( const XclExpRoot& rRoot, OUString& rType, int iSize, int iDxfId ); virtual ~XclExpTableStyleElement(); - virtual void SaveXml( XclExpStream& rStrm ); + virtual void SaveXml( XclExpXmlStream& rStrm ); private: OUString maType; - int maSize; - int maDxfId; + int miSize; + int miDxfId; }; class XclExpTableStyle : public XclExpRecordBase, protected XclExpRoot { public: - XclExpTableStyle( const XclExpRoot& rRoot, OUString& rTableStyleName ); + XclExpTableStyle( const XclExpRoot& rRoot, ScDBDataFormatting& rTableStyle, XclExpDxfs& rDxfs ); virtual ~XclExpTableStyle(); virtual void SaveXml( XclExpXmlStream& rStrm ); private: typedef boost::ptr_vector< XclExpTableStyleElement > StyleElementContainer; StyleElementContainer maStyleElementContainer; + ScDBDataFormatting maTableStyle; OUString maTableStyleName; + int miCount; }; class XclExpTableStyles : public XclExpRecordBase, protected XclExpRoot { public: - XclExpTableStyles( const XclExpRoot& rRoot ); + XclExpTableStyles( const XclExpRoot& rRoot, XclExpDxfs& rDxfs ); virtual ~XclExpTableStyles(); virtual void SaveXml( XclExpXmlStream& rStrm ); private: typedef boost::ptr_vector< XclExpTableStyle > StyleContainer; StyleContainer maStyleContainer; + int miCount; }; // ============================================================================ |