sc/inc/queryevaluator.hxx | 16 sc/inc/queryiter.hxx | 10 sc/inc/rangecache.hxx | 26 sc/qa/unit/data/functions/statistical/fods/countif.fods | 191 sc/qa/unit/data/functions/statistical/fods/countif2.fods | 3157 +++++++++++++++ sc/source/core/data/queryevaluator.cxx | 57 sc/source/core/data/queryiter.cxx | 37 sc/source/core/tool/interpr1.cxx | 8 sc/source/core/tool/rangecache.cxx | 69 9 files changed, 3411 insertions(+), 160 deletions(-)
New commits: commit 423f277cc0c185ff7eaf79aa9237585c52e0c652 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Fri Jun 24 13:52:46 2022 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Sun Jun 26 20:27:19 2022 +0200 fix ByValue lookups with ScSortedRangeCache My fix for tdf#149071 actually disabled the optimization for all ByValue lookups, because in fact all such lookups have maString set. So lookups where the cells are a mix of numeric and string values need different handling. A simple solution is detecting such a mix when collecting the values for ScSortedRangeCache and disabling the optimization in such a case. But it turns out that queries containing such a mix are not that rare, as documents may e.g. do COUNTIF($C:$C) where the given column has numeric values that start with a textual header. So bail out only if the string cell actually could affect the numeric query. Also fix ScSortedRangeCache usage depending on query parameters, different instances are needed for e.g. different ScQueryOp, because the ScQueryEvaluator functions may return different results (isQueryByString() is automatically true for SC_EQUAL). Change-Id: Ib4565cbf6194e7c525c4d10d00b1c31707952a79 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136403 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lu...@collabora.com> diff --git a/sc/inc/queryevaluator.hxx b/sc/inc/queryevaluator.hxx index 13e3f6ae93c8..f5724083444d 100644 --- a/sc/inc/queryevaluator.hxx +++ b/sc/inc/queryevaluator.hxx @@ -72,10 +72,10 @@ class ScQueryEvaluator std::vector<std::vector<double>> mCachedSortedItemValues; std::vector<std::vector<const rtl_uString*>> mCachedSortedItemStrings; - static bool isPartialTextMatchOp(const ScQueryEntry& rEntry); - static bool isTextMatchOp(const ScQueryEntry& rEntry); - static bool isMatchWholeCellHelper(bool docMatchWholeCell, const ScQueryEntry& rEntry); - bool isMatchWholeCell(const ScQueryEntry& rEntry) const; + static bool isPartialTextMatchOp(ScQueryOp eOp); + static bool isTextMatchOp(ScQueryOp eOp); + static bool isMatchWholeCellHelper(bool docMatchWholeCell, ScQueryOp eOp); + bool isMatchWholeCell(ScQueryOp eOp) const; void setupTransliteratorIfNeeded(); void setupCollatorIfNeeded(); @@ -114,13 +114,13 @@ public: bool ValidQuery(SCROW nRow, const ScRefCellValue* pCell = nullptr, sc::TableColumnBlockPositionSet* pBlockPos = nullptr); - static bool isQueryByValue(const ScQueryEntry& rEntry, const ScQueryEntry::Item& rItem, + static bool isQueryByValue(ScQueryOp eOp, ScQueryEntry::QueryType eType, const ScRefCellValue& rCell); - static bool isQueryByString(const ScQueryEntry& rEntry, const ScQueryEntry::Item& rItem, + static bool isQueryByString(ScQueryOp eOp, ScQueryEntry::QueryType eType, const ScRefCellValue& rCell); - OUString getCellString(const ScRefCellValue& rCell, SCROW nRow, const ScQueryEntry& rEntry, + OUString getCellString(const ScRefCellValue& rCell, SCROW nRow, SCCOL nCol, const svl::SharedString** sharedString); - static bool isMatchWholeCell(const ScDocument& rDoc, const ScQueryEntry& rEntry); + static bool isMatchWholeCell(const ScDocument& rDoc, ScQueryOp eOp); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/inc/queryiter.hxx b/sc/inc/queryiter.hxx index fa8f08083981..1d0066de7fb8 100644 --- a/sc/inc/queryiter.hxx +++ b/sc/inc/queryiter.hxx @@ -323,8 +323,9 @@ public: SCTAB nTable, const ScQueryParam& aParam, bool bMod) : Base( rDocument, rContext, nTable, aParam, bMod ) {} // Returns true if this iterator can be used for the given query. - static bool CanBeUsed(const ScDocument& rDoc, const ScQueryParam& aParam, - const ScFormulaCell* cell, const ScComplexRefData* refData); + static bool CanBeUsed(ScDocument& rDoc, const ScQueryParam& aParam, + SCTAB nTab, const ScFormulaCell* cell, const ScComplexRefData* refData, + ScInterpreterContext& context); }; @@ -372,8 +373,9 @@ public: SCTAB nTable, const ScQueryParam& aParam, bool bMod) : Base( rDocument, rContext, nTable, aParam, bMod ) {} // Returns true if this iterator can be used for the given query. - static bool CanBeUsed(const ScDocument& rDoc, const ScQueryParam& aParam, - const ScFormulaCell* cell, const ScComplexRefData* refData); + static bool CanBeUsed(ScDocument& rDoc, const ScQueryParam& aParam, + SCTAB nTab, const ScFormulaCell* cell, const ScComplexRefData* refData, + ScInterpreterContext& context); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/inc/rangecache.hxx b/sc/inc/rangecache.hxx index 048d9b9ba046..7490a570f20a 100644 --- a/sc/inc/rangecache.hxx +++ b/sc/inc/rangecache.hxx @@ -20,6 +20,7 @@ #pragma once #include "address.hxx" +#include "queryentry.hxx" #include <o3tl/hash_combine.hxx> #include <svl/listener.hxx> @@ -47,11 +48,13 @@ public: ScSortedRangeCache(ScDocument* pDoc, const ScRange& rRange, const ScQueryParam& param, ScInterpreterContext* context); + /// Returns if the cache is usable. + bool isValid() const { return mValid; } + /// Remove from document structure and delete (!) cache on modify hint. virtual void Notify(const SfxHint& rHint) override; const ScRange& getRange() const { return maRange; } - bool isDescending() const { return mDescending; } enum class ValueType { @@ -62,14 +65,16 @@ public: struct HashKey { ScRange range; - bool descending; - ValueType type; + ValueType valueType; + ScQueryOp queryOp; + ScQueryEntry::QueryType queryType; bool operator==(const HashKey& other) const { - return range == other.range && descending == other.descending && type == other.type; + return range == other.range && valueType == other.valueType && queryOp == other.queryOp + && queryType == other.queryType; } }; - HashKey getHashKey() const { return { maRange, mDescending, mValues }; } + HashKey getHashKey() const { return { maRange, mValueType, mQueryOp, mQueryType }; } static HashKey makeHashKey(const ScRange& range, const ScQueryParam& param); struct Hash @@ -78,8 +83,9 @@ public: { // Range should be just one column. size_t hash = key.range.hashStartColumn(); - o3tl::hash_combine(hash, key.descending); - o3tl::hash_combine(hash, key.type); + o3tl::hash_combine(hash, key.valueType); + o3tl::hash_combine(hash, key.queryOp); + o3tl::hash_combine(hash, key.queryType); return hash; } }; @@ -100,8 +106,10 @@ private: std::vector<size_t> mRowToIndex; // indexed by 'SCROW - maRange.aStart.Row()' ScRange maRange; ScDocument* mpDoc; - bool mDescending; - ValueType mValues; + bool mValid; + ValueType mValueType; + ScQueryOp mQueryOp; + ScQueryEntry::QueryType mQueryType; ScSortedRangeCache(const ScSortedRangeCache&) = delete; ScSortedRangeCache& operator=(const ScSortedRangeCache&) = delete; diff --git a/sc/qa/unit/data/functions/statistical/fods/countif.fods b/sc/qa/unit/data/functions/statistical/fods/countif.fods index 41ee8f439791..e144a049d059 100644 --- a/sc/qa/unit/data/functions/statistical/fods/countif.fods +++ b/sc/qa/unit/data/functions/statistical/fods/countif.fods @@ -3726,7 +3726,7 @@ <table:table-cell office:value-type="float" office:value="12" calcext:value-type="float"> <text:p>12</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A32];12)=ROUND([.B32];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A32];12)=ROUND([.B32];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A32])" office:value-type="string" office:string-value="=COUNTIF(P20:R23;"")" calcext:value-type="string"> @@ -3755,7 +3755,7 @@ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> <text:p>2</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A33];12)=ROUND([.B33];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A33];12)=ROUND([.B33];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A33])" office:value-type="string" office:string-value="=COUNTIF(N33:N35;"<>7")" calcext:value-type="string"> @@ -3784,7 +3784,7 @@ <table:table-cell office:value-type="float" office:value="9" calcext:value-type="float"> <text:p>9</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A34];12)=ROUND([.B34];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A34];12)=ROUND([.B34];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A34])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;".*")" calcext:value-type="string"> @@ -3815,7 +3815,7 @@ <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> <text:p>5</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A35];12)=ROUND([.B35];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A35];12)=ROUND([.B35];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A35])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;"abc")" calcext:value-type="string"> @@ -3846,7 +3846,7 @@ <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> <text:p>5</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A36];12)=ROUND([.B36];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A36];12)=ROUND([.B36];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A36])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;"ABC")" calcext:value-type="string"> @@ -3866,7 +3866,7 @@ <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> <text:p>4</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A37];12)=ROUND([.B37];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A37];12)=ROUND([.B37];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;"a")" calcext:value-type="string"> @@ -3886,7 +3886,7 @@ <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> <text:p>4</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A38];12)=ROUND([.B38];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A38];12)=ROUND([.B38];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;"A")" calcext:value-type="string"> @@ -3906,7 +3906,7 @@ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> <text:p>1</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A39];12)=ROUND([.B39];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A39];12)=ROUND([.B39];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;"(?-i)abc")" calcext:value-type="string"> @@ -3926,7 +3926,7 @@ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> <text:p>2</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A40];12)=ROUND([.B40];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A40];12)=ROUND([.B40];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A40])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;"(?-i)Abc")" calcext:value-type="string"> @@ -3946,7 +3946,7 @@ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> <text:p>3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A41];12)=ROUND([.B41];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A41];12)=ROUND([.B41];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A41])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;"(?-i)A")" calcext:value-type="string"> @@ -3966,7 +3966,7 @@ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> <text:p>2</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A42];12)=ROUND([.B42];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A42];12)=ROUND([.B42];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="=COUNTIF($Q$3:$Q$11;"a(?-i)B(?i)c")" calcext:value-type="string"> @@ -3986,7 +3986,7 @@ <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> <text:p>0</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A43];12)=ROUND([.B43];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A43];12)=ROUND([.B43];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:style-name="ce34" table:formula="of:=FORMULA([.A43])" office:value-type="string" office:string-value="=COUNTIF(BM5:BM9,0)" calcext:value-type="string"> @@ -4006,7 +4006,7 @@ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> <text:p>3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A44];12)=ROUND([.B44];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A44];12)=ROUND([.B44];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="=COUNTIF(I44:L44;"=")" calcext:value-type="string"> @@ -4030,7 +4030,7 @@ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> <text:p>1</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A45];12)=ROUND([.B45];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A45];12)=ROUND([.B45];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A45])" office:value-type="string" office:string-value="=COUNTIF(I45:L45;"<>")" calcext:value-type="string"> @@ -4054,7 +4054,7 @@ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> <text:p>1</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A46];12)=ROUND([.B46];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A46];12)=ROUND([.B46];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A46])" office:value-type="string" office:string-value="=COUNTIF(I46:L46;"<>")" calcext:value-type="string"> @@ -4078,7 +4078,7 @@ <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> <text:p>0</text:p> </table:table-cell> - <table:table-cell table:style-name="ce65" table:formula="of:=ROUND([.A47];12)=ROUND([.B47];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A47];12)=ROUND([.B47];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>TRUE</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A47])" office:value-type="string" office:string-value="=COUNTIF(I47:L47;"<>")" calcext:value-type="string"> @@ -4096,75 +4096,122 @@ </table:table-cell> </table:table-row> <table:table-row table:style-name="ro2"> - <table:table-cell/> - <table:table-cell table:style-name="ce23"/> - <table:table-cell table:style-name="ce64"/> - <table:table-cell table:style-name="ce34"/> + <table:table-cell table:formula="of:=COUNTIF([.J48:.J51];">2")" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A48];12)=ROUND([.B48];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A48])" office:value-type="string" office:string-value="=COUNTIF(J48:J51,">2")" calcext:value-type="string"> + <text:p>=COUNTIF(J48:J51,">2")</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>mixed numeric and string</text:p> + </table:table-cell> <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="ce20"/> - <table:table-cell table:number-columns-repeated="16"/> - <table:table-cell table:style-name="ce56"/> - <table:table-cell table:style-name="ce58"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>A2</text:p> + </table:table-cell> </table:table-row> <table:table-row table:style-name="ro2"> - <table:table-cell/> - <table:table-cell table:style-name="ce23"/> - <table:table-cell table:style-name="ce64"/> - <table:table-cell table:style-name="ce34"/> + <table:table-cell table:formula="of:=COUNTIF([.J48:.J51];"=2")" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A49];12)=ROUND([.B49];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A49])" office:value-type="string" office:string-value="=COUNTIF(J48:J51,"=2")" calcext:value-type="string"> + <text:p>=COUNTIF(J48:J51,"=2")</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>mixed numeric and string</text:p> + </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce24"/> - <table:table-cell table:style-name="ce20"/> - <table:table-cell table:number-columns-repeated="16"/> - <table:table-cell table:style-name="ce56"/> - <table:table-cell table:style-name="ce58"/> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> </table:table-row> <table:table-row table:style-name="ro2"> - <table:table-cell/> - <table:table-cell table:style-name="ce23"/> - <table:table-cell table:style-name="ce64"/> - <table:table-cell table:style-name="ce34"/> - <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce40"/> - <table:table-cell/> - <table:table-cell table:style-name="ce20"/> - <table:table-cell table:number-columns-repeated="16"/> - <table:table-cell table:style-name="ce56"/> - <table:table-cell table:style-name="ce58"/> - </table:table-row> - <table:table-row table:style-name="ro2" table:number-rows-repeated="4"> - <table:table-cell/> - <table:table-cell table:style-name="ce23"/> - <table:table-cell table:style-name="ce64"/> - <table:table-cell table:style-name="ce34"/> + <table:table-cell table:formula="of:=COUNTIF([.J48:.J51];"<2")" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A50];12)=ROUND([.B50];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A50])" office:value-type="string" office:string-value="=COUNTIF(J48:J51,"<2")" calcext:value-type="string"> + <text:p>=COUNTIF(J48:J51,"<2")</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>mixed numeric and string</text:p> + </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce42"/> - <table:table-cell table:style-name="ce20"/> - <table:table-cell table:number-columns-repeated="16"/> - <table:table-cell table:style-name="ce56"/> - <table:table-cell table:style-name="ce58"/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> </table:table-row> <table:table-row table:style-name="ro2"> - <table:table-cell/> - <table:table-cell table:style-name="ce23"/> - <table:table-cell table:style-name="ce64"/> - <table:table-cell table:style-name="ce34"/> + <table:table-cell table:formula="of:=COUNTIF([.I49:.I52];">2")" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A51];12)=ROUND([.B51];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A51])" office:value-type="string" office:string-value="=COUNTIF(I49:I52,">2")" calcext:value-type="string"> + <text:p>=COUNTIF(I49:I52,">2")</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>mixed numeric and string</text:p> + </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce42"/> - <table:table-cell table:style-name="science"/> - <table:table-cell table:number-columns-repeated="16"/> - <table:table-cell table:style-name="ce56"/> - <table:table-cell table:style-name="ce58"/> + <table:table-cell table:style-name="ce25" office:value-type="float" office:value="55" calcext:value-type="float"> + <text:p>55</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> </table:table-row> <table:table-row table:style-name="ro2"> - <table:table-cell/> - <table:table-cell table:style-name="ce23"/> + <table:table-cell table:formula="of:=COUNTIF([.I49:.I52];"=5")" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce64" table:formula="of:=ROUND([.A52];12)=ROUND([.B52];12)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="=COUNTIF(I49:I52,"=5")" calcext:value-type="string"> + <text:p>=COUNTIF(I49:I52,"=5")</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>mixed numeric and string</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>55</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="4"> + <table:table-cell table:number-columns-repeated="2"/> <table:table-cell table:style-name="ce64"/> - <table:table-cell table:style-name="ce34"/> - <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="science"/> - <table:table-cell table:number-columns-repeated="16"/> - <table:table-cell table:style-name="ce56"/> - <table:table-cell table:style-name="ce58"/> </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:formula="of:=COUNTIF([.I53];[.I53])" office:value-type="float" office:value="0" calcext:value-type="float"> diff --git a/sc/qa/unit/data/functions/statistical/fods/countif2.fods b/sc/qa/unit/data/functions/statistical/fods/countif2.fods new file mode 100644 index 000000000000..35a61b34c642 --- /dev/null +++ b/sc/qa/unit/data/functions/statistical/fods/countif2.fods @@ -0,0 +1,3157 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:c hart:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatibl e:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><dc:date>2022-06-24T17:18:16.764582540</dc:date><meta:editing-duration>PT11M4S</meta:editing-duration><meta:editing-cycles>2</meta:editing-cycles><meta:generator>LibreOfficeDev/7.5.0.0.alpha0$Linux_X86_64 LibreOffice_project/d25a8aa5225fce111a477486d5664e80977f0dbe</meta:generator><meta:document-statistic meta:table-count="2" meta:cell-count="63" meta:object-count="0"/></office:meta> + <office:settings> + <config:config-item-set config:name="ooo:view-settings"> + <config:config-item config:name="VisibleAreaTop" config:type="int">0</config:config-item> + <config:config-item config:name="VisibleAreaLeft" config:type="int">0</config:config-item> + <config:config-item config:name="VisibleAreaWidth" config:type="int">23857</config:config-item> + <config:config-item config:name="VisibleAreaHeight" config:type="int">4064</config:config-item> + <config:config-item-map-indexed config:name="Views"> + <config:config-item-map-entry> + <config:config-item config:name="ViewId" config:type="string">view1</config:config-item> + <config:config-item-map-named config:name="Tables"> + <config:config-item-map-entry config:name="Sheet1"> + <config:config-item config:name="CursorPositionX" config:type="int">0</config:config-item> + <config:config-item config:name="CursorPositionY" config:type="int">9</config:config-item> + <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item> + <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item> + <config:config-item config:name="PositionRight" config:type="int">0</config:config-item> + <config:config-item config:name="PositionTop" config:type="int">0</config:config-item> + <config:config-item config:name="PositionBottom" config:type="int">0</config:config-item> + <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> + <config:config-item config:name="ZoomValue" config:type="int">100</config:config-item> + <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> + <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> + <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> + </config:config-item-map-entry> + <config:config-item-map-entry config:name="Sheet2"> + <config:config-item config:name="CursorPositionX" config:type="int">3</config:config-item> + <config:config-item config:name="CursorPositionY" config:type="int">11</config:config-item> + <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item> + <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item> + <config:config-item config:name="PositionRight" config:type="int">0</config:config-item> + <config:config-item config:name="PositionTop" config:type="int">0</config:config-item> + <config:config-item config:name="PositionBottom" config:type="int">0</config:config-item> + <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> + <config:config-item config:name="ZoomValue" config:type="int">100</config:config-item> + <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> + <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> + <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> + </config:config-item-map-entry> + </config:config-item-map-named> + <config:config-item config:name="ActiveTable" config:type="string">Sheet1</config:config-item> + <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1860</config:config-item> + <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> + <config:config-item config:name="ZoomValue" config:type="int">100</config:config-item> + <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> + <config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item> + <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> + <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item> + <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item> + <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item> + <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> + <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item> + <config:config-item config:name="IsValueHighlightingEnabled" config:type="boolean">false</config:config-item> + <config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item> + <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item> + <config:config-item config:name="RasterResolutionX" config:type="int">1000</config:config-item> + <config:config-item config:name="RasterResolutionY" config:type="int">1000</config:config-item> + <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item> + <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item> + <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item> + <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> + </config:config-item-map-entry> + </config:config-item-map-indexed> + </config:config-item-set> + <config:config-item-set config:name="ooo:configuration-settings"> + <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item> + <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item> + <config:config-item config:name="AutoCalculate" config:type="boolean">true</config:config-item> + <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item> + <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item> + <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item> + <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item> + <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item> + <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item> + <config:config-item config:name="IsDocumentShared" config:type="boolean">false</config:config-item> + <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item> + <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item> + <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item> + <config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item> + <config:config-item config:name="LinkUpdateMode" config:type="short">3</config:config-item> + <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterName" config:type="string">CUPS-PDF</config:config-item> + <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterSetup" config:type="base64Binary">kQH+/0NVUFMtUERGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpDVVBTLVBERgAAAAAAAAAAAAAAAAAAAAAAAAAWAAMArgAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9Q1VQUy1QREYKb3JpZW50YXRpb249UG9ydHJhaXQKY29waWVzPTEKY29sbGF0ZT1mYWxzZQptYXJnaW5hZGp1c3RtZW50PTAsMCwwLDAKY29sb3JkZXB0aD0yNApwc2xldmVsPTAKcGRmZGV2aWNlPTEKY29sb3JkZXZpY2U9MApQUERDb250ZXh0RGF0YQpQYWdlU2l6ZTpBNAAAEgBDT01QQVRfRFVQTEVYX01PREUTAER1cGxleE1vZGU6OlVua25vd24=</config:config-item> + <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item> + <config:config-item config:name="RasterResolutionX" config:type="int">1000</config:config-item> + <config:config-item config:name="RasterResolutionY" config:type="int">1000</config:config-item> + <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item> + <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item> + <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item> + <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> + <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item> + <config:config-item config:name="SyntaxStringRef" config:type="short">7</config:config-item> + <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item> + <config:config-item-map-named config:name="ScriptConfiguration"> + <config:config-item-map-entry config:name="Sheet1"> + <config:config-item config:name="CodeName" config:type="string">Sheet1</config:config-item> + </config:config-item-map-entry> + <config:config-item-map-entry config:name="Sheet2"> + <config:config-item config:name="CodeName" config:type="string">Sheet2</config:config-item> + </config:config-item-map-entry> + </config:config-item-map-named> + </config:config-item-set> + </office:settings> + <office:scripts> + <office:script script:language="ooo:Basic"> + <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/> + </office:script> + </office:scripts> + <office:font-face-decls> + <style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Droid Sans Devanagari" svg:font-family="'Droid Sans Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Droid Sans Devanagari1" svg:font-family="'Droid Sans Devanagari'" style:font-family-generic="swiss"/> + <style:font-face style:name="Droid Sans Fallback" svg:font-family="'Droid Sans Fallback'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="table-cell"> + <style:paragraph-properties style:tab-stop-distance="0.5in"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-size="10pt" fo:language="en" fo:country="US" style:font-name-asian="Arial" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <number:number-style style:name="N0"> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N122P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N122"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N122P0"/> + </number:currency-style> + <number:currency-style style:name="N417P0" style:volatile="true"> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N417"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N417P0"/> + </number:currency-style> + <number:number-style style:name="N413P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N413"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N413P0"/> + </number:number-style> + <number:percentage-style style:name="N411"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:currency-style style:name="N406P0" style:volatile="true"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N406"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N406P0"/> + </number:currency-style> + <number:currency-style style:name="N404P0" style:volatile="true"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N404"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N404P0"/> + </number:currency-style> + <number:number-style style:name="N402P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N402P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N402P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N402"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N402P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N402P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N402P2"/> + </number:text-style> + <number:currency-style style:name="N391P0" style:volatile="true"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N391"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N391P0"/> + </number:currency-style> + <number:number-style style:name="N389P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N389"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N389P0"/> + </number:number-style> + <number:currency-style style:name="N384P0" style:volatile="true"> + <number:currency-symbol number:language="de" number:country="AT">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N384"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="de" number:country="AT">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N384P0"/> + </number:currency-style> + <number:number-style style:name="N382P0" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N382P1" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N382P2" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N382"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N382P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N382P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N382P2"/> + </number:text-style> + <number:number-style style:name="N379P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N379P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N379P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N379"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N379P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N379P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N379P2"/> + </number:text-style> + <number:number-style style:name="N367"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N365P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N365P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N365P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N365"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N365P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N365P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N365P2"/> + </number:text-style> + <number:currency-style style:name="N359P0" style:volatile="true"> + <number:currency-symbol number:language="ja" number:country="JP">¥</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N359"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="ja" number:country="JP">¥</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N359P0"/> + </number:currency-style> + <number:percentage-style style:name="N357P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N357"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + <number:text>%</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N357P0"/> + </number:percentage-style> + <number:number-style style:name="N356P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N356P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N356P2" style:volatile="true"> + <number:text> - € </number:text> + </number:number-style> + <number:text-style style:name="N356"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N356P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N356P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N356P2"/> + </number:text-style> + <number:number-style style:name="N350P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N350"> + <style:text-properties fo:color="#ff0000"/> + <number:text>\-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N350P0"/> + </number:number-style> + <number:percentage-style style:name="N349P0" style:volatile="true"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:grouping="true"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N349"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:grouping="true"/> + <number:text>%</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N349P0"/> + </number:percentage-style> + <number:number-style style:name="N345P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N345P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N345P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N345"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N345P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N345P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N345P2"/> + </number:text-style> + <number:percentage-style style:name="N329"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N325P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N325"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N325P0"/> + </number:number-style> + <number:number-style style:name="N324P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N324"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N324P0"/> + </number:number-style> + <number:currency-style style:name="N322P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N322"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N322P0"/> + </number:currency-style> + <number:percentage-style style:name="N320"> + <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N315P0" style:volatile="true"> + <number:text> £</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N315P1" style:volatile="true"> + <number:text>-£</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N315P2" style:volatile="true"> + <number:text> £</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N315"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N315P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N315P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N315P2"/> + </number:text-style> + <number:currency-style style:name="N311P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N311"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N311P0"/> + </number:currency-style> + <number:number-style style:name="N309P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N309"> + <number:text>\-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N309P0"/> + </number:number-style> + <number:currency-style style:name="N308P0" style:volatile="true"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N308"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N308P0"/> + </number:currency-style> + <number:text-style style:name="N306"> + <number:text-content/> + <number:text> - Result=0 - No Errordetection</number:text> + </number:text-style> + <number:number-style style:name="N305P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N305P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N305P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- Kč </number:text> + </number:number-style> + <number:text-style style:name="N305"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N305P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N305P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N305P2"/> + </number:text-style> + <number:number-style style:name="N301P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N301P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N301P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N301"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N301P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N301P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N301P2"/> + </number:text-style> + <number:date-style style:name="N297"> + <number:day/> + <number:text>/</number:text> + <number:month/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:number-style style:name="N296P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N296P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N296P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- DM </number:text> + </number:number-style> + <number:text-style style:name="N296"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N296P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N296P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N296P2"/> + </number:text-style> + <number:number-style style:name="N292P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N292"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N292P0"/> + </number:number-style> + <number:currency-style style:name="N291P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N291"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N291P0"/> + </number:currency-style> + <number:currency-style style:name="N289P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N289"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N289P0"/> + </number:currency-style> + <number:date-style style:name="N287"> + <number:day-of-week number:style="long"/> + <number:text> </number:text> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:currency-style style:name="N279P0" style:volatile="true"> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N279"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N279P0"/> + </number:currency-style> + <number:number-style style:name="N277P0" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N277P1" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N277P2" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N277"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N277P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N277P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N277P2"/> + </number:text-style> + <number:number-style style:name="N269P0" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N269P1" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N269"> + <number:text>No</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N269P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N269P1"/> + </number:number-style> + <number:number-style style:name="N267P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="0" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N267"> + <style:text-properties fo:color="#000000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="0" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N267P0"/> + </number:number-style> + <number:currency-style style:name="N261P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:min-integer-digits="1" number:decimal-replacement="--" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N261"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:min-integer-digits="1" number:decimal-replacement="--" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N261P0"/> + </number:currency-style> + <number:currency-style style:name="N259P0" style:volatile="true"> + <number:currency-symbol number:language="cs" number:country="CZ">¥€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="3"> + <number:embedded-text number:position="5"> </number:embedded-text> + </number:number> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N259"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol number:language="cs" number:country="CZ">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="3"> + <number:embedded-text number:position="5"> </number:embedded-text> + </number:number> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N259P0"/> + </number:currency-style> + <number:number-style style:name="N257P0" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N257P1" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N257P2" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N257"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N257P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N257P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N257P2"/> + </number:text-style> + <number:date-style style:name="N256"> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:number-style style:name="N255P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N255"> + <style:text-properties fo:color="#ff0000"/> + <number:text>($</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N255P0"/> + </number:number-style> + <number:number-style style:name="N238"> + <number:scientific-number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N226"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N225P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N225"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N225P0"/> + </number:number-style> + <number:number-style style:name="N224P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N224"> + <number:text>\-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N224P0"/> + </number:number-style> + <number:number-style style:name="N419"> + <number:number number:decimal-places="19" number:min-decimal-places="19" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N222"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N415"> + <number:scientific-number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N218"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N414P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N414"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N414P0"/> + </number:number-style> + <number:number-style style:name="N217P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N217"> + <style:text-properties fo:color="#ff0000"/> + <number:text>\-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N217P0"/> + </number:number-style> + <number:number-style style:name="N412"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N215P0" style:volatile="true"> + <number:text/> + </number:number-style> + <number:currency-style style:name="N215"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N215P0"/> + </number:currency-style> + <number:currency-style style:name="N410P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N410"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N410P0"/> + </number:currency-style> + <number:date-style style:name="N213"> + <number:day-of-week/> + <number:text> </number:text> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:number-style style:name="N409P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N409P1" style:volatile="true"> + <number:text> (</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N409P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N409"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N409P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N409P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N409P2"/> + </number:text-style> + <number:number-style style:name="N212P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N212"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N212P0"/> + </number:number-style> + <number:number-style style:name="N210P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N210"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N210P0"/> + </number:number-style> + <number:number-style style:name="N208P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N208P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N208P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> Kč </number:text> + </number:number-style> + <number:text-style style:name="N208"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N208P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N208P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N208P2"/> + </number:text-style> + <number:percentage-style style:name="N204"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N400P0" style:volatile="true"> + <number:text> £</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N400P1" style:volatile="true"> + <number:text>-£</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N400P2" style:volatile="true"> + <number:text> £</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N400"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N400P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N400P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N400P2"/> + </number:text-style> + <number:number-style style:name="N203P0" style:volatile="true"> + <number:text>£</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N203"> + <number:text>-£</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N203P0"/> + </number:number-style> + <number:number-style style:name="N202P0" style:volatile="true"> + <number:text>£</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N202"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-£</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N202P0"/> + </number:number-style> + <number:percentage-style style:name="N200"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N396P0" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N396P1" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N396P2" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N396"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N396P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N396P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N396P2"/> + </number:text-style> + <number:percentage-style style:name="N199"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N392"> + <number:number number:decimal-places="19" number:min-decimal-places="19" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:currency-style style:name="N195P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N195"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N195P0"/> + </number:currency-style> + <number:number-style style:name="N285P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N285P1" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N285P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N285"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N285P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N285P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N285P2"/> + </number:text-style> + <number:number-style style:name="N188P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N188"> + <number:text>($</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> ... etc. - the rest is truncated