summaryrefslogtreecommitdiff
path: root/sc/source/filter/xml
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-06-06 05:41:42 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-06-11 08:01:25 +0200
commitc41ee0d526c6d105d53cace1c81e43a9cc519c2d (patch)
tree7b0e4b2c41ed5dfdd9108664cbae7096ed1fbb5d /sc/source/filter/xml
parent306f586453aa90eb29ae95770f84a13ead056b7c (diff)
fix cond format import from ods
Change-Id: I974c46fad862edd320b54d4c7e72807dd715dfb1
Diffstat (limited to 'sc/source/filter/xml')
-rw-r--r--sc/source/filter/xml/XMLConverter.cxx32
-rw-r--r--sc/source/filter/xml/XMLConverter.hxx2
-rw-r--r--sc/source/filter/xml/xmlcondformat.cxx131
-rw-r--r--sc/source/filter/xml/xmlcondformat.hxx9
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx27
-rw-r--r--sc/source/filter/xml/xmlimprt.cxx24
-rw-r--r--sc/source/filter/xml/xmlimprt.hxx16
-rw-r--r--sc/source/filter/xml/xmlstyli.cxx2
8 files changed, 209 insertions, 34 deletions
diff --git a/sc/source/filter/xml/XMLConverter.cxx b/sc/source/filter/xml/XMLConverter.cxx
index aa67e5502b2a..b475c174e694 100644
--- a/sc/source/filter/xml/XMLConverter.cxx
+++ b/sc/source/filter/xml/XMLConverter.cxx
@@ -546,19 +546,6 @@ void lclSkipExpression( const sal_Unicode*& rpcString, const sal_Unicode* pcEnd,
@param cEndChar
The termination character following the expression.
*/
-OUString lclGetExpression( const sal_Unicode*& rpcString, const sal_Unicode* pcEnd, sal_Unicode cEndChar )
-{
- OUString aExp;
- const sal_Unicode* pcExpStart = rpcString;
- lclSkipExpression( rpcString, pcEnd, cEndChar );
- if( rpcString < pcEnd )
- {
- aExp = OUString( pcExpStart, static_cast< sal_Int32 >( rpcString - pcExpStart ) ).trim();
- ++rpcString;
- }
- return aExp;
-}
-
/** Tries to skip an empty pair of parentheses (which may contain whitespace
characters).
@@ -634,7 +621,7 @@ void ScXMLConditionHelper::parseCondition(
// format is <condition>(<expression>)
if( (pcString < pcEnd) && (*pcString == '(') )
{
- rParseResult.maOperand1 = lclGetExpression( ++pcString, pcEnd, ')' );
+ rParseResult.maOperand1 = getExpression( ++pcString, pcEnd, ')' );
if( !rParseResult.maOperand1.isEmpty() )
rParseResult.meToken = pCondInfo->meToken;
}
@@ -644,10 +631,10 @@ void ScXMLConditionHelper::parseCondition(
// format is <condition>(<expression1>,<expression2>)
if( (pcString < pcEnd) && (*pcString == '(') )
{
- rParseResult.maOperand1 = lclGetExpression( ++pcString, pcEnd, ',' );
+ rParseResult.maOperand1 = getExpression( ++pcString, pcEnd, ',' );
if( !rParseResult.maOperand1.isEmpty() )
{
- rParseResult.maOperand2 = lclGetExpression( pcString, pcEnd, ')' );
+ rParseResult.maOperand2 = getExpression( pcString, pcEnd, ')' );
if( !rParseResult.maOperand2.isEmpty() )
rParseResult.meToken = pCondInfo->meToken;
}
@@ -658,6 +645,19 @@ void ScXMLConditionHelper::parseCondition(
}
}
+OUString ScXMLConditionHelper::getExpression( const sal_Unicode*& rpcString, const sal_Unicode* pcEnd, sal_Unicode cEndChar )
+{
+ OUString aExp;
+ const sal_Unicode* pcExpStart = rpcString;
+ lclSkipExpression( rpcString, pcEnd, cEndChar );
+ if( rpcString < pcEnd )
+ {
+ aExp = OUString( pcExpStart, static_cast< sal_Int32 >( rpcString - pcExpStart ) ).trim();
+ ++rpcString;
+ }
+ return aExp;
+}
+
// ============================================================================
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/xml/XMLConverter.hxx b/sc/source/filter/xml/XMLConverter.hxx
index 995e3e86e91a..2a07969d2d0a 100644
--- a/sc/source/filter/xml/XMLConverter.hxx
+++ b/sc/source/filter/xml/XMLConverter.hxx
@@ -164,6 +164,8 @@ public:
const ::rtl::OUString& rAttribute,
sal_Int32 nStartIndex );
+ static rtl::OUString getExpression(const sal_Unicode*& rpcString, const sal_Unicode* pcEnd, sal_Unicode cEndChar );
+
private:
ScXMLConditionHelper();
~ScXMLConditionHelper();
diff --git a/sc/source/filter/xml/xmlcondformat.cxx b/sc/source/filter/xml/xmlcondformat.cxx
index 673ee00b9597..6aa55ccd5028 100644
--- a/sc/source/filter/xml/xmlcondformat.cxx
+++ b/sc/source/filter/xml/xmlcondformat.cxx
@@ -41,12 +41,14 @@
#include "scitems.hxx"
#include "patattr.hxx"
#include "svl/intitem.hxx"
+#include "XMLConverter.hxx"
ScXMLConditionalFormatsContext::ScXMLConditionalFormatsContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
const ::rtl::OUString& rLName):
SvXMLImportContext( rImport, nPrfx, rLName )
{
+ GetScImport().SetNewCondFormatData();
GetScImport().GetDocument()->SetCondFormList(new ScConditionalFormatList(), GetScImport().GetTables().GetCurrentSheet());
}
@@ -115,6 +117,9 @@ SvXMLImportContext* ScXMLConditionalFormatContext::CreateChildContext( sal_uInt1
SvXMLImportContext* pContext = NULL;
switch (nToken)
{
+ case XML_TOK_CONDFORMAT_CONDITION:
+ pContext = new ScXMLCondContext( GetScImport(), nPrefix, rLocalName, xAttrList, mpFormat );
+ break;
case XML_TOK_CONDFORMAT_COLORSCALE:
pContext = new ScXMLColorScaleFormatContext( GetScImport(), nPrefix, rLocalName, mpFormat );
break;
@@ -284,6 +289,132 @@ void ScXMLDataBarFormatContext::EndElement()
namespace {
+void GetConditionData(const rtl::OUString& rValue, ScConditionMode& eMode, rtl::OUString& rExpr1, rtl::OUString& rExpr2)
+{
+ if(rValue.indexOf("unique") == 0)
+ {
+ eMode = SC_COND_NOTDUPLICATE;
+ }
+ else if(rValue.indexOf("duplicate") == 0)
+ {
+ eMode = SC_COND_DUPLICATE;
+ }
+ else if(rValue.indexOf("between") == 0)
+ {
+ const sal_Unicode* pStr = rValue.getStr();
+ const sal_Unicode* pStart = pStr + 7;
+ const sal_Unicode* pEnd = pStr + rValue.getLength();
+ rExpr1 = ScXMLConditionHelper::getExpression( pStart, pEnd, ',');
+ rExpr2 = ScXMLConditionHelper::getExpression( pStart, pEnd, ')');
+ eMode = SC_COND_BETWEEN;
+ }
+ else if(rValue.indexOf("not-between") == 0)
+ {
+ const sal_Unicode* pStr = rValue.getStr();
+ const sal_Unicode* pStart = pStr + 12;
+ const sal_Unicode* pEnd = pStr + rValue.getLength();
+ rExpr1 = ScXMLConditionHelper::getExpression( pStart, pEnd, ',');
+ rExpr2 = ScXMLConditionHelper::getExpression( pStart, pEnd, ')');
+ eMode = SC_COND_NOTBETWEEN;
+ }
+ else if(rValue.indexOf("<=") == 0)
+ {
+ rExpr1 = rValue.copy(2);
+ eMode = SC_COND_EQLESS;
+ }
+ else if(rValue.indexOf(">=") == 0)
+ {
+ rExpr1 = rValue.copy(2);
+ eMode = SC_COND_EQGREATER;
+ }
+ else if(rValue.indexOf("!=") == 0)
+ {
+ rExpr1 = rValue.copy(2);
+ eMode = SC_COND_NOTEQUAL;
+ }
+ else if(rValue.indexOf("<") == 0)
+ {
+ rExpr1 = rValue.copy(1);
+ eMode = SC_COND_LESS;
+ }
+ else if(rValue.indexOf("=") == 0)
+ {
+ rExpr1 = rValue.copy(1);
+ eMode = SC_COND_EQUAL;
+ }
+ else if(rValue.indexOf(">") == 0)
+ {
+ rExpr1 = rValue.copy(1);
+ eMode = SC_COND_GREATER;
+ }
+ else if(rValue.indexOf("formula-is") == 0)
+ {
+ const sal_Unicode* pStr = rValue.getStr();
+ const sal_Unicode* pStart = pStr + 11;
+ const sal_Unicode* pEnd = pStr + rValue.getLength();
+ rExpr1 = ScXMLConditionHelper::getExpression( pStart, pEnd, ',');
+ eMode = SC_COND_DIRECT;
+ }
+ else
+ eMode = SC_COND_NONE;
+}
+
+}
+
+ScXMLCondContext::ScXMLCondContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+ const ::rtl::OUString& rLName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
+ ScConditionalFormat* pFormat ):
+ SvXMLImportContext( rImport, nPrfx, rLName )
+{
+ rtl::OUString sExpression;
+ rtl::OUString sStyle;
+ rtl::OUString sAddress;
+
+ sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
+ const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetConditionAttrMap();
+ for( sal_Int16 i=0; i < nAttrCount; ++i )
+ {
+ const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
+ rtl::OUString aLocalName;
+ sal_uInt16 nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
+ sAttrName, &aLocalName ));
+ const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
+
+ switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+ {
+ case XML_TOK_CONDITION_VALUE:
+ sExpression = sValue;
+ break;
+ case XML_TOK_CONDITION_APPLY_STYLE_NAME:
+ sStyle = sValue;
+ case XML_TOK_CONDITION_BASE_CELL_ADDRESS:
+ sAddress = sValue;
+ default:
+ break;
+ }
+ }
+
+ rtl::OUString aExpr1;
+ rtl::OUString aExpr2;
+ ScConditionMode eMode;
+ GetConditionData(sExpression, eMode, aExpr1, aExpr2);
+ ScAddress aPos;
+ sal_Int32 nIndex = 0;
+ ScRangeStringConverter::GetAddressFromString(aPos, sAddress, GetScImport().GetDocument(), formula::FormulaGrammar::CONV_ODF, nIndex);
+
+ ScCondFormatEntry* pFormatEntry = new ScCondFormatEntry(eMode, aExpr1, aExpr2, GetScImport().GetDocument(), aPos, sStyle,
+ rtl::OUString(), rtl::OUString(), formula::FormulaGrammar::GRAM_ODFF, formula::FormulaGrammar::GRAM_ODFF);
+
+ pFormat->AddEntry(pFormatEntry);
+}
+
+void ScXMLCondContext::EndElement()
+{
+
+}
+
+namespace {
+
void setColorEntryType(const rtl::OUString& rType, ScColorScaleEntry* pEntry, const rtl::OUString rFormula,
ScXMLImport& rImport)
{
diff --git a/sc/source/filter/xml/xmlcondformat.hxx b/sc/source/filter/xml/xmlcondformat.hxx
index 80926ccb3b37..8d84a15f574a 100644
--- a/sc/source/filter/xml/xmlcondformat.hxx
+++ b/sc/source/filter/xml/xmlcondformat.hxx
@@ -169,17 +169,18 @@ public:
virtual void EndElement();
};
-class ScXMLConditionContext : public SvXMLImportContext
+class ScXMLCondContext : public SvXMLImportContext
{
const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
public:
- ScXMLConditionContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
+ ScXMLCondContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
const ::rtl::OUString& rLName,
const ::com::sun::star::uno::Reference<
- ::com::sun::star::xml::sax::XAttributeList>& xAttrList);
+ ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
+ ScConditionalFormat* pFormat);
- virtual ~ScXMLConditionContext() {}
+ virtual ~ScXMLCondContext() {}
virtual void EndElement();
};
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index 71caee8acadc..bb4d6fc863ed 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -3842,44 +3842,45 @@ void ScXMLExport::ExportConditionalFormat(SCTAB nTab)
{
const ScCondFormatEntry* pEntry = static_cast<const ScCondFormatEntry*>(pFormatEntry);
rtl::OUStringBuffer aCond;
+ ScAddress aPos = pEntry->GetSrcPos();
switch(pEntry->GetOperation())
{
case SC_COND_EQUAL:
aCond.append('=');
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
break;
case SC_COND_LESS:
aCond.append('<');
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
break;
case SC_COND_GREATER:
aCond.append('>');
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
break;
case SC_COND_EQLESS:
aCond.append("<=");
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
break;
case SC_COND_EQGREATER:
aCond.append(">=");
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
break;
case SC_COND_NOTEQUAL:
aCond.append("!=");
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
break;
case SC_COND_BETWEEN:
aCond.append(rtl::OUString("between("));
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
aCond.append(',');
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 1, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 1, 0, formula::FormulaGrammar::GRAM_ODFF));
aCond.append(')');
break;
case SC_COND_NOTBETWEEN:
aCond.append(rtl::OUString("not-between("));
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
aCond.append(',');
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 1, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 1, 0, formula::FormulaGrammar::GRAM_ODFF));
aCond.append(')');
break;
case SC_COND_DUPLICATE:
@@ -3890,7 +3891,7 @@ void ScXMLExport::ExportConditionalFormat(SCTAB nTab)
break;
case SC_COND_DIRECT:
aCond.append("formula-is(");
- aCond.append(pEntry->GetExpression(pEntry->GetSrcPos(), 0, 0, formula::FormulaGrammar::GRAM_ODFF));
+ aCond.append(pEntry->GetExpression(aPos, 0, 0, formula::FormulaGrammar::GRAM_ODFF));
aCond.append(')');
break;
case SC_COND_NONE:
@@ -3899,6 +3900,10 @@ void ScXMLExport::ExportConditionalFormat(SCTAB nTab)
rtl::OUString sStyle = pEntry->GetStyle();
AddAttribute(XML_NAMESPACE_CALC_EXT, XML_APPLY_STYLE_NAME, sStyle);
AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, aCond.makeStringAndClear());
+
+ rtl::OUString sBaseAddress;
+ ScRangeStringConverter::GetStringFromAddress( sBaseAddress, aPos, pDoc,formula::FormulaGrammar::CONV_ODF );
+ AddAttribute(XML_NAMESPACE_CALC_EXT, XML_BASE_CELL_ADDRESS, sBaseAddress);
SvXMLElementExport aElementCondEntry(*this, XML_NAMESPACE_CALC_EXT, XML_CONDITION, true, true);
}
else if(pFormatEntry->GetType() == condformat::COLORSCALE)
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index 219345d3d350..5d1d99a9376f 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -618,6 +618,7 @@ const SvXMLTokenMap& ScXMLImport::GetCondFormatTokenMap()
{
{ XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE, XML_TOK_CONDFORMAT_COLORSCALE },
{ XML_NAMESPACE_CALC_EXT, XML_DATA_BAR, XML_TOK_CONDFORMAT_DATABAR },
+ { XML_NAMESPACE_CALC_EXT, XML_CONDITION, XML_TOK_CONDFORMAT_CONDITION },
XML_TOKEN_MAP_END
};
@@ -643,6 +644,24 @@ const SvXMLTokenMap& ScXMLImport::GetCondFormatAttrMap()
return *pCondFormatAttrMap;
}
+const SvXMLTokenMap& ScXMLImport::GetConditionAttrMap()
+{
+ if( !pConditionAttrMap )
+ {
+ static SvXMLTokenMapEntry aConditionAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_CALC_EXT, XML_VALUE, XML_TOK_CONDITION_VALUE },
+ { XML_NAMESPACE_CALC_EXT, XML_APPLY_STYLE_NAME, XML_TOK_CONDITION_APPLY_STYLE_NAME },
+ { XML_NAMESPACE_CALC_EXT, XML_BASE_CELL_ADDRESS, XML_TOK_CONDITION_BASE_CELL_ADDRESS },
+ XML_TOKEN_MAP_END
+ };
+
+ pConditionAttrMap = new SvXMLTokenMap( aConditionAttrTokenMap );
+ }
+
+ return *pConditionAttrMap;
+}
+
const SvXMLTokenMap& ScXMLImport::GetColorScaleTokenMap()
{
if( !pColorScaleTokenMap )
@@ -1853,6 +1872,7 @@ ScXMLImport::ScXMLImport(
pCondFormatsTokenMap( 0 ),
pCondFormatTokenMap( 0 ),
pCondFormatAttrMap( 0 ),
+ pConditionAttrMap( 0 ),
pColorScaleTokenMap( 0 ),
pColorScaleEntryAttrTokenMap( 0 ),
pDataBarTokenMap( 0 ),
@@ -1934,7 +1954,8 @@ ScXMLImport::ScXMLImport(
bNullDateSetted(false),
bSelfImportingXMLSet(false),
bLatinDefaultStyle(false),
- bFromWrapper(false)
+ bFromWrapper(false),
+ mbHasNewCondFormatData(false)
{
pStylesImportHelper = new ScMyStylesImportHelper(*this);
@@ -1988,6 +2009,7 @@ ScXMLImport::~ScXMLImport() throw()
delete pCondFormatsTokenMap;
delete pCondFormatTokenMap;
delete pCondFormatAttrMap;
+ delete pConditionAttrMap;
delete pColorScaleTokenMap;
delete pColorScaleEntryAttrTokenMap;
delete pDataBarTokenMap;
diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx
index b94752f21e84..541987b59c8a 100644
--- a/sc/source/filter/xml/xmlimprt.hxx
+++ b/sc/source/filter/xml/xmlimprt.hxx
@@ -159,7 +159,8 @@ enum ScXMLCondFormatsTokens
enum ScXMLCondFormatTokens
{
XML_TOK_CONDFORMAT_COLORSCALE,
- XML_TOK_CONDFORMAT_DATABAR
+ XML_TOK_CONDFORMAT_DATABAR,
+ XML_TOK_CONDFORMAT_CONDITION
};
enum ScXMLCondFormatAttrTokens
@@ -167,6 +168,13 @@ enum ScXMLCondFormatAttrTokens
XML_TOK_CONDFORMAT_TARGET_RANGE
};
+enum ScXMLConditionAttrTokens
+{
+ XML_TOK_CONDITION_VALUE,
+ XML_TOK_CONDITION_APPLY_STYLE_NAME,
+ XML_TOK_CONDITION_BASE_CELL_ADDRESS
+};
+
enum ScXMLColorScaleFormatTokens
{
XML_TOK_COLORSCALE_COLORSCALEENTRY
@@ -769,6 +777,7 @@ class ScXMLImport: public SvXMLImport
SvXMLTokenMap *pCondFormatsTokenMap;
SvXMLTokenMap *pCondFormatTokenMap;
SvXMLTokenMap *pCondFormatAttrMap;
+ SvXMLTokenMap *pConditionAttrMap;
SvXMLTokenMap *pColorScaleTokenMap;
SvXMLTokenMap *pColorScaleEntryAttrTokenMap;
SvXMLTokenMap *pDataBarTokenMap;
@@ -863,6 +872,7 @@ class ScXMLImport: public SvXMLImport
bool bSelfImportingXMLSet;
bool bLatinDefaultStyle; // latin-only number format in default style?
bool bFromWrapper; // called from ScDocShell / ScXMLImportWrapper?
+ bool mbHasNewCondFormatData;
protected:
@@ -930,6 +940,7 @@ public:
const SvXMLTokenMap& GetCondFormatsTokenMap();
const SvXMLTokenMap& GetCondFormatTokenMap();
const SvXMLTokenMap& GetCondFormatAttrMap();
+ const SvXMLTokenMap& GetConditionAttrMap();
const SvXMLTokenMap& GetColorScaleTokenMap();
const SvXMLTokenMap& GetColorScaleEntryAttrMap();
const SvXMLTokenMap& GetDataBarTokenMap();
@@ -1044,6 +1055,9 @@ public:
void ProgressBarIncrement(bool bEditCell, sal_Int32 nInc = 1);
+ void SetNewCondFormatData() { mbHasNewCondFormatData = true; }
+ bool HasNewCondFormatData() { return mbHasNewCondFormatData; }
+
private:
void AddStyleRange(const com::sun::star::table::CellRangeAddress& rCellRange);
void SetStyleToRanges();
diff --git a/sc/source/filter/xml/xmlstyli.cxx b/sc/source/filter/xml/xmlstyli.cxx
index 45e82c5028db..460f642c93a8 100644
--- a/sc/source/filter/xml/xmlstyli.cxx
+++ b/sc/source/filter/xml/xmlstyli.cxx
@@ -521,7 +521,7 @@ void XMLTableStyleContext::FillPropertySet(
sal_Int32 nNumFmt = GetNumberFormat();
if (nNumFmt >= 0)
AddProperty(CTF_SC_NUMBERFORMAT, uno::makeAny(nNumFmt));
- if (!bConditionalFormatCreated && (aMaps.size() > 0))
+ if (!GetScImport().HasNewCondFormatData() && !bConditionalFormatCreated && (!aMaps.empty()))
{
aConditionalFormat = rPropSet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_CONDXML)));
std::vector<ScXMLMapContent>::iterator aItr(aMaps.begin());