summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/source/filter/inc/condformatbuffer.hxx1
-rw-r--r--sc/source/filter/inc/extlstcontext.hxx4
-rw-r--r--sc/source/filter/oox/condformatbuffer.cxx13
-rw-r--r--sc/source/filter/oox/extlstcontext.cxx28
4 files changed, 45 insertions, 1 deletions
diff --git a/sc/source/filter/inc/condformatbuffer.hxx b/sc/source/filter/inc/condformatbuffer.hxx
index 1180b1e0aa74..cdc8d4727baf 100644
--- a/sc/source/filter/inc/condformatbuffer.hxx
+++ b/sc/source/filter/inc/condformatbuffer.hxx
@@ -242,6 +242,7 @@ struct ExCfRuleModel
::Color mnNegativeColor;
OUString maAxisPosition; // DataBar
OUString maColorScaleType; // Cfvo
+ OUString msScaleTypeValue; // Cfvo
bool mbGradient; // DataBar
bool mbIsLower; // Cfvo
};
diff --git a/sc/source/filter/inc/extlstcontext.hxx b/sc/source/filter/inc/extlstcontext.hxx
index 8635c6029523..077ebdbebf8e 100644
--- a/sc/source/filter/inc/extlstcontext.hxx
+++ b/sc/source/filter/inc/extlstcontext.hxx
@@ -32,11 +32,13 @@ public:
virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) override;
virtual void onStartElement( const AttributeList& rAttribs ) override;
+ virtual void onCharacters( const OUString& rChars ) override;
+ virtual void onEndElement() override;
private:
ScDataBarFormatData* mpTarget;
-
bool mbFirstEntry;
+ ExtCfDataBarRuleRef mpRule;
};
struct ExtCondFormatRuleModel
diff --git a/sc/source/filter/oox/condformatbuffer.cxx b/sc/source/filter/oox/condformatbuffer.cxx
index da99d8ab645e..5e3e0d4a18b5 100644
--- a/sc/source/filter/oox/condformatbuffer.cxx
+++ b/sc/source/filter/oox/condformatbuffer.cxx
@@ -1434,6 +1434,19 @@ void ExtCfDataBarRule::finalizeImport()
pEntry->SetType(COLORSCALE_PERCENT);
else if (maModel.maColorScaleType == "formula")
pEntry->SetType(COLORSCALE_FORMULA);
+ else if (maModel.maColorScaleType == "num")
+ pEntry->SetType(COLORSCALE_VALUE);
+
+ if (!maModel.msScaleTypeValue.isEmpty())
+ {
+ sal_Int32 nSize = 0;
+ rtl_math_ConversionStatus eStatus = rtl_math_ConversionStatus_Ok;
+ double fValue = rtl::math::stringToDouble(maModel.msScaleTypeValue, '.', '\0', &eStatus, &nSize);
+ if (eStatus == rtl_math_ConversionStatus_Ok && nSize == maModel.msScaleTypeValue.getLength())
+ {
+ pEntry->SetValue(fValue);
+ }
+ }
break;
}
case UNKNOWN: // nothing to do
diff --git a/sc/source/filter/oox/extlstcontext.cxx b/sc/source/filter/oox/extlstcontext.cxx
index 760ba26c1727..2646f0969958 100644
--- a/sc/source/filter/oox/extlstcontext.cxx
+++ b/sc/source/filter/oox/extlstcontext.cxx
@@ -80,6 +80,7 @@ void ExtCfRuleContext::onStartElement( const AttributeList& rAttribs )
xRule->importCfvo( rAttribs );
xRule->getModel().mbIsLower = mbFirstEntry;
mbFirstEntry = false;
+ mpRule = xRule;
break;
}
default:
@@ -87,6 +88,33 @@ void ExtCfRuleContext::onStartElement( const AttributeList& rAttribs )
}
}
+void ExtCfRuleContext::onCharacters( const OUString& rChars )
+{
+ switch( getCurrentElement() )
+ {
+ case XM_TOKEN( f ):
+ {
+ if (mpRule)
+ {
+ mpRule->getModel().msScaleTypeValue = rChars;
+ }
+ }
+ break;
+ }
+}
+
+void ExtCfRuleContext::onEndElement()
+{
+ switch( getCurrentElement() )
+ {
+ case XLS14_TOKEN( cfvo ):
+ {
+ mpRule.reset();
+ break;
+ }
+ }
+}
+
namespace {
bool IsSpecificTextCondMode(ScConditionMode eMode)
{