Kaydet (Commit) 65457cba authored tarafından Markus Mohrhard's avatar Markus Mohrhard

implement color scale and data bar export to xlsx

Only 2007 versions of DataBars supported yet

Change-Id: Id1d10aae2bb5221246740defa3d4a97a1cd7c908
üst 65095170
...@@ -908,6 +908,12 @@ rtl::OString getColorScaleType( const ScColorScaleEntry& rEntry ) ...@@ -908,6 +908,12 @@ rtl::OString getColorScaleType( const ScColorScaleEntry& rEntry )
return "percent"; return "percent";
case COLORSCALE_FORMULA: case COLORSCALE_FORMULA:
return "formula"; return "formula";
case COLORSCALE_AUTOMIN:
return "min";
case COLORSCALE_AUTOMAX:
return "max";
case COLORSCALE_PERCENTILE:
return "percentile";
default: default:
break; break;
} }
...@@ -940,10 +946,10 @@ void XclExpCfvo::SaveXml( XclExpXmlStream& rStrm ) ...@@ -940,10 +946,10 @@ void XclExpCfvo::SaveXml( XclExpXmlStream& rStrm )
rWorksheet->endElement( XML_cfvo ); rWorksheet->endElement( XML_cfvo );
} }
XclExpColScaleCol::XclExpColScaleCol( const XclExpRoot& rRoot, const ScColorScaleEntry& rEntry ): XclExpColScaleCol::XclExpColScaleCol( const XclExpRoot& rRoot, const Color& rColor ):
XclExpRecord(), XclExpRecord(),
XclExpRoot( rRoot ), XclExpRoot( rRoot ),
mrEntry( rEntry ) mrColor( rColor )
{ {
} }
...@@ -956,11 +962,12 @@ void XclExpColScaleCol::SaveXml( XclExpXmlStream& rStrm ) ...@@ -956,11 +962,12 @@ void XclExpColScaleCol::SaveXml( XclExpXmlStream& rStrm )
sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream(); sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();
rWorksheet->startElement( XML_color, rWorksheet->startElement( XML_color,
XML_rgb, XclXmlUtils::ToOString( mrEntry.GetColor() ).getStr(), XML_rgb, XclXmlUtils::ToOString( mrColor ).getStr(),
FSEND ); FSEND );
rWorksheet->endElement( XML_color ); rWorksheet->endElement( XML_color );
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
XclExpCondfmt::XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat& rCondFormat ) : XclExpCondfmt::XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat& rCondFormat ) :
...@@ -977,6 +984,10 @@ XclExpCondfmt::XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat ...@@ -977,6 +984,10 @@ XclExpCondfmt::XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat
{ {
if(pFormatEntry->GetType() == condformat::CONDITION) if(pFormatEntry->GetType() == condformat::CONDITION)
maCFList.AppendNewRecord( new XclExpCF( GetRoot(), static_cast<const ScCondFormatEntry&>(*pFormatEntry), nIndex ) ); maCFList.AppendNewRecord( new XclExpCF( GetRoot(), static_cast<const ScCondFormatEntry&>(*pFormatEntry), nIndex ) );
else if(pFormatEntry->GetType() == condformat::COLORSCALE)
maCFList.AppendNewRecord( new XclExpColorScale( GetRoot(), static_cast<const ScColorScaleFormat&>(*pFormatEntry), nIndex ) );
else if(pFormatEntry->GetType() == condformat::DATABAR)
maCFList.AppendNewRecord( new XclExpDataBar( GetRoot(), static_cast<const ScDataBarFormat&>(*pFormatEntry), nIndex ) );
} }
aScRanges.Format( msSeqRef, SCA_VALID, NULL, formula::FormulaGrammar::CONV_XL_A1 ); aScRanges.Format( msSeqRef, SCA_VALID, NULL, formula::FormulaGrammar::CONV_XL_A1 );
} }
...@@ -1030,10 +1041,11 @@ void XclExpCondfmt::SaveXml( XclExpXmlStream& rStrm ) ...@@ -1030,10 +1041,11 @@ void XclExpCondfmt::SaveXml( XclExpXmlStream& rStrm )
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
XclExpColorScale::XclExpColorScale( const XclExpRoot& rRoot, const ScColorScaleFormat& rFormat ): XclExpColorScale::XclExpColorScale( const XclExpRoot& rRoot, const ScColorScaleFormat& rFormat, sal_Int32 nPriority ):
XclExpRecord(), XclExpRecord(),
XclExpRoot( rRoot ), XclExpRoot( rRoot ),
mrFormat( rFormat ) mrFormat( rFormat ),
mnPriority( nPriority )
{ {
const ScRange* pRange = rFormat.GetRange().front(); const ScRange* pRange = rFormat.GetRange().front();
ScAddress aAddr = pRange->aStart; ScAddress aAddr = pRange->aStart;
...@@ -1044,23 +1056,18 @@ XclExpColorScale::XclExpColorScale( const XclExpRoot& rRoot, const ScColorScaleF ...@@ -1044,23 +1056,18 @@ XclExpColorScale::XclExpColorScale( const XclExpRoot& rRoot, const ScColorScaleF
XclExpCfvoList::RecordRefType xCfvo( new XclExpCfvo( GetRoot(), *itr, aAddr ) ); XclExpCfvoList::RecordRefType xCfvo( new XclExpCfvo( GetRoot(), *itr, aAddr ) );
maCfvoList.AppendRecord( xCfvo ); maCfvoList.AppendRecord( xCfvo );
XclExpColScaleColList::RecordRefType xClo( new XclExpColScaleCol( GetRoot(), *itr ) ); XclExpColScaleColList::RecordRefType xClo( new XclExpColScaleCol( GetRoot(), itr->GetColor() ) );
maColList.AppendRecord( xClo ); maColList.AppendRecord( xClo );
} }
} }
void XclExpColorScale::SaveXml( XclExpXmlStream& rStrm ) void XclExpColorScale::SaveXml( XclExpXmlStream& rStrm )
{ {
const ScRangeList& rRanges = mrFormat.GetRange();
sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream(); sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();
rWorksheet->startElement( XML_conditionalFormatting,
XML_sqref, XclXmlUtils::ToOString(rRanges).getStr(),
FSEND );
rWorksheet->startElement( XML_cfRule, rWorksheet->startElement( XML_cfRule,
XML_type, "colorScale", XML_type, "colorScale",
XML_priority, "1", XML_priority, OString::valueOf( mnPriority + 1 ).getStr(),
FSEND ); FSEND );
rWorksheet->startElement( XML_colorScale, FSEND ); rWorksheet->startElement( XML_colorScale, FSEND );
...@@ -1073,7 +1080,44 @@ void XclExpColorScale::SaveXml( XclExpXmlStream& rStrm ) ...@@ -1073,7 +1080,44 @@ void XclExpColorScale::SaveXml( XclExpXmlStream& rStrm )
rWorksheet->endElement( XML_cfRule ); rWorksheet->endElement( XML_cfRule );
// OOXTODO: XML_extLst // OOXTODO: XML_extLst
rWorksheet->endElement( XML_conditionalFormatting ); }
XclExpDataBar::XclExpDataBar( const XclExpRoot& rRoot, const ScDataBarFormat& rFormat, sal_Int32 nPriority ):
XclExpRecord(),
XclExpRoot( rRoot ),
mrFormat( rFormat ),
mnPriority( nPriority )
{
const ScRange* pRange = rFormat.GetRange().front();
ScAddress aAddr = pRange->aStart;
// exact position is not important, we allow only absolute refs
mpCfvoLowerLimit.reset( new XclExpCfvo( GetRoot(), *mrFormat.GetDataBarData()->mpLowerLimit.get(), aAddr ) );
mpCfvoUpperLimit.reset( new XclExpCfvo( GetRoot(), *mrFormat.GetDataBarData()->mpUpperLimit.get(), aAddr ) );
mpCol.reset( new XclExpColScaleCol( GetRoot(), mrFormat.GetDataBarData()->maPositiveColor ) );
}
void XclExpDataBar::SaveXml( XclExpXmlStream& rStrm )
{
sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();
rWorksheet->startElement( XML_cfRule,
XML_type, "dataBar",
XML_priority, OString::valueOf( mnPriority + 1 ).getStr(),
FSEND );
rWorksheet->startElement( XML_dataBar, FSEND );
mpCfvoLowerLimit->SaveXml(rStrm);
mpCfvoUpperLimit->SaveXml(rStrm);
mpCol->SaveXml(rStrm);
rWorksheet->endElement( XML_dataBar );
rWorksheet->endElement( XML_cfRule );
// OOXTODO: XML_extLst
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
...@@ -1100,10 +1144,7 @@ void XclExpCondFormatBuffer::Save( XclExpStream& rStrm ) ...@@ -1100,10 +1144,7 @@ void XclExpCondFormatBuffer::Save( XclExpStream& rStrm )
void XclExpCondFormatBuffer::SaveXml( XclExpXmlStream& rStrm ) void XclExpCondFormatBuffer::SaveXml( XclExpXmlStream& rStrm )
{ {
maCondfmtList.SaveXml( rStrm ); maCondfmtList.SaveXml( rStrm );
maColorScaleList.SaveXml( rStrm );
} }
// Validation ================================================================= // Validation =================================================================
......
...@@ -211,12 +211,12 @@ private: ...@@ -211,12 +211,12 @@ private:
class XclExpColScaleCol : public XclExpRecord, protected XclExpRoot class XclExpColScaleCol : public XclExpRecord, protected XclExpRoot
{ {
public: public:
explicit XclExpColScaleCol( const XclExpRoot& rRoot, const ScColorScaleEntry& rFormatEntry); explicit XclExpColScaleCol( const XclExpRoot& rRoot, const Color& rColor);
virtual ~XclExpColScaleCol(); virtual ~XclExpColScaleCol();
virtual void SaveXml( XclExpXmlStream& rStrm ); virtual void SaveXml( XclExpXmlStream& rStrm );
private: private:
const ScColorScaleEntry& mrEntry; const Color& mrColor;
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
...@@ -243,7 +243,7 @@ private: ...@@ -243,7 +243,7 @@ private:
virtual void WriteBody( XclExpStream& rStrm ); virtual void WriteBody( XclExpStream& rStrm );
private: private:
typedef XclExpRecordList< XclExpCF > XclExpCFList; typedef XclExpRecordList< XclExpRecord > XclExpCFList;
XclExpCFList maCFList; /// List of CF records. XclExpCFList maCFList; /// List of CF records.
XclRangeList maXclRanges; /// Cell ranges for this conditional format. XclRangeList maXclRanges; /// Cell ranges for this conditional format.
...@@ -253,7 +253,7 @@ private: ...@@ -253,7 +253,7 @@ private:
class XclExpColorScale: public XclExpRecord, protected XclExpRoot class XclExpColorScale: public XclExpRecord, protected XclExpRoot
{ {
public: public:
explicit XclExpColorScale( const XclExpRoot& rRoot, const ScColorScaleFormat& rFormat ); explicit XclExpColorScale( const XclExpRoot& rRoot, const ScColorScaleFormat& rFormat, sal_Int32 nPriority );
virtual void SaveXml( XclExpXmlStream& rStrm ); virtual void SaveXml( XclExpXmlStream& rStrm );
private: private:
...@@ -263,6 +263,22 @@ private: ...@@ -263,6 +263,22 @@ private:
XclExpCfvoList maCfvoList; XclExpCfvoList maCfvoList;
XclExpColScaleColList maColList; XclExpColScaleColList maColList;
const ScColorScaleFormat& mrFormat; const ScColorScaleFormat& mrFormat;
sal_Int32 mnPriority;
};
class XclExpDataBar : public XclExpRecord, protected XclExpRoot
{
public:
explicit XclExpDataBar( const XclExpRoot& rRoot, const ScDataBarFormat& rFormat, sal_Int32 nPriority );
virtual void SaveXml( XclExpXmlStream& rStrm );
private:
boost::scoped_ptr<XclExpCfvo> mpCfvoLowerLimit;
boost::scoped_ptr<XclExpCfvo> mpCfvoUpperLimit;
boost::scoped_ptr<XclExpColScaleCol> mpCol;
const ScDataBarFormat& mrFormat;
sal_Int32 mnPriority;
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
...@@ -280,9 +296,7 @@ public: ...@@ -280,9 +296,7 @@ public:
private: private:
typedef XclExpRecordList< XclExpCondfmt > XclExpCondfmtList; typedef XclExpRecordList< XclExpCondfmt > XclExpCondfmtList;
typedef XclExpRecordList< XclExpColorScale > XclExpColorScaleList;
XclExpCondfmtList maCondfmtList; /// List of CONDFMT records. XclExpCondfmtList maCondfmtList; /// List of CONDFMT records.
XclExpColorScaleList maColorScaleList; // Color scale entries
}; };
// Data Validation ============================================================ // Data Validation ============================================================
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment