summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2018-07-15 00:18:58 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2018-07-15 23:05:26 +0200
commit16048ebc230880148346f02403820b7646b2649c (patch)
treed9407a48d4ab9ac8382f9b8fafb6dbedec32f85f
parent6df45ae3a85b21d984605a6656282e5feaf8dea9 (diff)
related tdf#117816, only export cond format formula to xlsx when required
Change-Id: I7523d17e9945dfbdf0c346fff8eddd40593f946a Reviewed-on: https://gerrit.libreoffice.org/57444 Tested-by: Jenkins Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r--sc/source/filter/excel/xecontent.cxx27
1 files changed, 24 insertions, 3 deletions
diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx
index 4e0863d12e1b..04f3a9c0f2bd 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -937,6 +937,27 @@ bool IsTextRule(ScConditionMode eMode)
return false;
}
+bool RequiresFormula(ScConditionMode eMode)
+{
+ if (IsTopBottomRule(eMode))
+ return false;
+ else if (IsTextRule(eMode))
+ return false;
+
+ switch (eMode)
+ {
+ case ScConditionMode::NoError:
+ case ScConditionMode::Error:
+ case ScConditionMode::Duplicate:
+ case ScConditionMode::NotDuplicate:
+ return false;
+ default:
+ break;
+ }
+
+ return true;
+}
+
bool RequiresFixedFormula(ScConditionMode eMode)
{
switch(eMode)
@@ -963,9 +984,9 @@ OString GetFixedFormula(ScConditionMode eMode, const ScAddress& rAddress, const
switch (eMode)
{
case ScConditionMode::Error:
- return "";
+ return OString("ISERROR(" + aPos + ")") ;
case ScConditionMode::NoError:
- return "";
+ return OString("NOT(ISERROR(" + aPos + "))") ;
case ScConditionMode::BeginsWith:
return OString("LEFT(" + aPos + ",LEN(\"" + rText + "\"))=\"" + rText + "\"");
case ScConditionMode::EndsWith:
@@ -1034,7 +1055,7 @@ void XclExpCFImpl::SaveXml( XclExpXmlStream& rStrm )
rWorksheet->writeEscaped(aFormula.getStr());
rWorksheet->endElement( XML_formula );
}
- else if(!IsTextRule(eOperation) && !IsTopBottomRule(eOperation))
+ else if(RequiresFormula(eOperation))
{
rWorksheet->startElement( XML_formula, FSEND );
std::unique_ptr<ScTokenArray> pTokenArray(mrFormatEntry.CreateFlatCopiedTokenArray(0));