From 72d3539e26f0485743126301c438bcb05b02643d Mon Sep 17 00:00:00 2001 From: Noel Power Date: Mon, 24 Sep 2012 09:57:57 +0100 Subject: fix parent style import xlsx fdo#55198 Change-Id: I77d38eba69ad7aa89b0f9b692e40fd365d002071 --- sc/inc/document.hxx | 2 +- sc/source/filter/inc/stylesbuffer.hxx | 5 ++++- sc/source/filter/oox/stylesbuffer.cxx | 28 ++++++++++++++++++++++++---- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index b12ce261964f..da7b57521025 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -1230,7 +1230,7 @@ public: SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, const ScStyleSheet& rStyle); - void ApplySelectionStyle( const ScStyleSheet& rStyle, const ScMarkData& rMark ); + SC_DLLPUBLIC void ApplySelectionStyle( const ScStyleSheet& rStyle, const ScMarkData& rMark ); void ApplySelectionLineStyle( const ScMarkData& rMark, const ::editeng::SvxBorderLine* pLine, bool bColorOnly ); diff --git a/sc/source/filter/inc/stylesbuffer.hxx b/sc/source/filter/inc/stylesbuffer.hxx index 5257f04f3155..43b22a967d9e 100644 --- a/sc/source/filter/inc/stylesbuffer.hxx +++ b/sc/source/filter/inc/stylesbuffer.hxx @@ -831,7 +831,7 @@ public: inline const CellStyleModel& getModel() const { return maModel; } /** Returns the final style name used in the document. */ inline const ::rtl::OUString& getFinalStyleName() const { return maFinalName; } - + inline ::ScStyleSheet* getStyleSheet() { return mpStyleSheet; } private: CellStyleModel maModel; ::rtl::OUString maFinalName; /// Final style name used in API. @@ -863,12 +863,14 @@ public: ::rtl::OUString getDefaultStyleName() const; /** Creates the style sheet described by the style XF with the passed identifier. */ ::rtl::OUString createCellStyle( sal_Int32 nXfId ) const; + ::ScStyleSheet* getCellStyleSheet( sal_Int32 nXfId ) const; private: /** Inserts the passed cell style object into the internal maps. */ void insertCellStyle( CellStyleRef xCellStyle ); /** Creates the style sheet described by the passed cell style object. */ ::rtl::OUString createCellStyle( const CellStyleRef& rxCellStyle ) const; + ::ScStyleSheet* getCellStyleSheet( const CellStyleRef& rxCellStyle ) const; private: typedef RefVector< CellStyle > CellStyleVector; @@ -967,6 +969,7 @@ public: ::rtl::OUString getDefaultStyleName() const; /** Creates the style sheet described by the style XF with the passed identifier. */ ::rtl::OUString createCellStyle( sal_Int32 nXfId ) const; + ::ScStyleSheet* getCellStyleSheet( sal_Int32 nXfId ) const; /** Creates the style sheet described by the DXF with the passed identifier. */ ::rtl::OUString createDxfStyle( sal_Int32 nDxfId ) const; diff --git a/sc/source/filter/oox/stylesbuffer.cxx b/sc/source/filter/oox/stylesbuffer.cxx index 1ac390a0d5af..cb1ce6eef76c 100644 --- a/sc/source/filter/oox/stylesbuffer.cxx +++ b/sc/source/filter/oox/stylesbuffer.cxx @@ -2260,10 +2260,13 @@ void Xf::writeToMarkData( ::ScMarkData& rMarkData, sal_Int32 nNumFmtId ) ScDocument& rDoc = getScDocument(); if ( isCellXf() ) { + StylesBuffer& rStyles = getStyles(); + rStyles.createCellStyle( maModel.mnStyleXfId ); + + mpStyleSheet = rStyles.getCellStyleSheet( maModel.mnStyleXfId ); if ( mpStyleSheet ) { - // Apply style sheet. Don't clear the direct formats. - rPat.SetStyleSheet(mpStyleSheet, false); + rDoc.ApplySelectionStyle( static_cast(*mpStyleSheet), rMarkData ); } else { @@ -2275,7 +2278,7 @@ void Xf::writeToMarkData( ::ScMarkData& rMarkData, sal_Int32 nNumFmtId ) ScGlobal::GetRscString(STR_STYLENAME_STANDARD), SFX_STYLE_FAMILY_PARA)); if (pStyleSheet) - rPat.SetStyleSheet(pStyleSheet, false); + rDoc.ApplySelectionStyle( static_cast(*pStyleSheet), rMarkData ); } } } @@ -2329,7 +2332,6 @@ Xf::createPattern( bool bSkipPoolDefs ) { if( mpPattern.get() ) return *mpPattern; - // create new pattern attribute set mpPattern.reset( new ::ScPatternAttr( getScDocument().GetPool() ) ); SfxItemSet& rItemSet = mpPattern->GetItemSet(); /* Enables the used flags, if the formatting attributes differ from the @@ -2858,6 +2860,11 @@ OUString CellStyleBuffer::createCellStyle( sal_Int32 nXfId ) const return createCellStyle( maStylesByXf.get( nXfId ) ); } +::ScStyleSheet* CellStyleBuffer::getCellStyleSheet( sal_Int32 nXfId ) const +{ + return getCellStyleSheet( maStylesByXf.get( nXfId ) ); +} + // private -------------------------------------------------------------------- void CellStyleBuffer::insertCellStyle( CellStyleRef xCellStyle ) @@ -2878,6 +2885,14 @@ void CellStyleBuffer::insertCellStyle( CellStyleRef xCellStyle ) } } +::ScStyleSheet* CellStyleBuffer::getCellStyleSheet( const CellStyleRef& rxCellStyle ) const +{ + ::ScStyleSheet* pStyleSheet = NULL; + if ( rxCellStyle.get() ) + pStyleSheet = rxCellStyle->getStyleSheet(); + return pStyleSheet; +} + OUString CellStyleBuffer::createCellStyle( const CellStyleRef& rxCellStyle ) const { if( rxCellStyle.get() ) @@ -3128,6 +3143,11 @@ OUString StylesBuffer::createCellStyle( sal_Int32 nXfId ) const return maCellStyles.createCellStyle( nXfId ); } +::ScStyleSheet* StylesBuffer::getCellStyleSheet( sal_Int32 nXfId ) const +{ + return maCellStyles.getCellStyleSheet( nXfId ); +} + OUString StylesBuffer::createDxfStyle( sal_Int32 nDxfId ) const { OUString& rStyleName = maDxfStyles[ nDxfId ]; -- cgit