diff options
-rw-r--r-- | formula/inc/core_resource.hrc | 6 | ||||
-rw-r--r-- | include/formula/compiler.hxx | 2 | ||||
-rw-r--r-- | include/formula/opcode.hxx | 2 | ||||
-rw-r--r-- | sc/README.md | 1 | ||||
-rw-r--r-- | sc/inc/helpids.h | 1 | ||||
-rw-r--r-- | sc/inc/queryiter.hxx | 60 | ||||
-rw-r--r-- | sc/inc/scfuncs.hrc | 18 | ||||
-rw-r--r-- | sc/qa/extras/scfunctionlistobj.cxx | 2 | ||||
-rw-r--r-- | sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods | 4553 | ||||
-rw-r--r-- | sc/qa/unit/ucalc.cxx | 1 | ||||
-rw-r--r-- | sc/qa/unit/ucalc_sort.cxx | 4 | ||||
-rw-r--r-- | sc/source/core/data/funcdesc.cxx | 1 | ||||
-rw-r--r-- | sc/source/core/data/queryiter.cxx | 184 | ||||
-rw-r--r-- | sc/source/core/inc/interpre.hxx | 61 | ||||
-rw-r--r-- | sc/source/core/tool/interpr1.cxx | 1116 | ||||
-rw-r--r-- | sc/source/core/tool/interpr4.cxx | 1 | ||||
-rw-r--r-- | sc/source/core/tool/parclass.cxx | 1 | ||||
-rw-r--r-- | sc/source/core/tool/token.cxx | 1 | ||||
-rw-r--r-- | sc/source/filter/excel/xlformula.cxx | 13 | ||||
-rw-r--r-- | sc/source/filter/oox/formulabase.cxx | 15 |
20 files changed, 5758 insertions, 285 deletions
diff --git a/formula/inc/core_resource.hrc b/formula/inc/core_resource.hrc index baed318f586e..835d928ea4a8 100644 --- a/formula/inc/core_resource.hrc +++ b/formula/inc/core_resource.hrc @@ -275,6 +275,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] = { "COUNTIFS" , SC_OPCODE_COUNT_IFS }, { "LOOKUP" , SC_OPCODE_LOOKUP }, { "VLOOKUP" , SC_OPCODE_V_LOOKUP }, + { "COM.MICROSOFT.XLOOKUP" , SC_OPCODE_X_LOOKUP }, { "HLOOKUP" , SC_OPCODE_H_LOOKUP }, { "ORG.OPENOFFICE.MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union) { "OFFSET" , SC_OPCODE_OFFSET }, @@ -722,6 +723,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] = { "COUNTIFS" , SC_OPCODE_COUNT_IFS }, { "LOOKUP" , SC_OPCODE_LOOKUP }, { "VLOOKUP" , SC_OPCODE_V_LOOKUP }, + { "_xlfn.XLOOKUP" , SC_OPCODE_X_LOOKUP }, { "HLOOKUP" , SC_OPCODE_H_LOOKUP }, { "_xlfn.ORG.OPENOFFICE.MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union) { "OFFSET" , SC_OPCODE_OFFSET }, @@ -1172,6 +1174,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] = { "COUNTIFS" , SC_OPCODE_COUNT_IFS }, { "LOOKUP" , SC_OPCODE_LOOKUP }, { "VLOOKUP" , SC_OPCODE_V_LOOKUP }, + { "XLOOKUP" , SC_OPCODE_X_LOOKUP }, { "HLOOKUP" , SC_OPCODE_H_LOOKUP }, { "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union) { "OFFSET" , SC_OPCODE_OFFSET }, @@ -1623,6 +1626,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] = { "COUNTIFS" , SC_OPCODE_COUNT_IFS }, { "LOOKUP" , SC_OPCODE_LOOKUP }, { "VLOOKUP" , SC_OPCODE_V_LOOKUP }, + { "XLOOKUP" , SC_OPCODE_X_LOOKUP }, { "HLOOKUP" , SC_OPCODE_H_LOOKUP }, { "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union) { "OFFSET" , SC_OPCODE_OFFSET }, @@ -2072,6 +2076,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] = { "COUNTIFS" , SC_OPCODE_COUNT_IFS }, { "LOOKUP" , SC_OPCODE_LOOKUP }, { "VLOOKUP" , SC_OPCODE_V_LOOKUP }, + { "XLOOKUP" , SC_OPCODE_X_LOOKUP }, { "HLOOKUP" , SC_OPCODE_H_LOOKUP }, { "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, { "OFFSET" , SC_OPCODE_OFFSET }, @@ -2502,6 +2507,7 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] = { NC_("RID_STRLIST_FUNCTION_NAMES", "COUNTIFS") , SC_OPCODE_COUNT_IFS }, { NC_("RID_STRLIST_FUNCTION_NAMES", "LOOKUP") , SC_OPCODE_LOOKUP }, { NC_("RID_STRLIST_FUNCTION_NAMES", "VLOOKUP") , SC_OPCODE_V_LOOKUP }, + { NC_("RID_STRLIST_FUNCTION_NAMES", "XLOOKUP") , SC_OPCODE_X_LOOKUP }, { NC_("RID_STRLIST_FUNCTION_NAMES", "HLOOKUP") , SC_OPCODE_H_LOOKUP }, { NC_("RID_STRLIST_FUNCTION_NAMES", "MULTIRANGE") , SC_OPCODE_MULTI_AREA }, // legacy for range list (union) { NC_("RID_STRLIST_FUNCTION_NAMES", "OFFSET") , SC_OPCODE_OFFSET }, diff --git a/include/formula/compiler.hxx b/include/formula/compiler.hxx index fcf7326d3e0f..479008dfb1a2 100644 --- a/include/formula/compiler.hxx +++ b/include/formula/compiler.hxx @@ -398,7 +398,7 @@ #define SC_OPCODE_CELL 385 #define SC_OPCODE_ISPMT 386 #define SC_OPCODE_HYPERLINK 387 -// free: 388 +#define SC_OPCODE_X_LOOKUP 388 // free: 389 #define SC_OPCODE_GET_PIVOT_DATA 390 #define SC_OPCODE_EUROCONVERT 391 diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx index d92ae0b1d41d..ad056a9b0b50 100644 --- a/include/formula/opcode.hxx +++ b/include/formula/opcode.hxx @@ -316,6 +316,7 @@ enum OpCode : sal_uInt16 ocCountIfs = SC_OPCODE_COUNT_IFS, ocLookup = SC_OPCODE_LOOKUP, ocVLookup = SC_OPCODE_V_LOOKUP, + ocXLookup = SC_OPCODE_X_LOOKUP, ocHLookup = SC_OPCODE_H_LOOKUP, ocMultiArea = SC_OPCODE_MULTI_AREA, ocOffset = SC_OPCODE_OFFSET, @@ -798,6 +799,7 @@ inline std::string OpCodeEnumToString(OpCode eCode) case ocCountIfs: return "CountIfs"; case ocLookup: return "Lookup"; case ocVLookup: return "VLookup"; + case ocXLookup: return "XLookup"; case ocHLookup: return "HLookup"; case ocMultiArea: return "MultiArea"; case ocOffset: return "Offset"; diff --git a/sc/README.md b/sc/README.md index 826bb71a9e9b..a778661d46f9 100644 --- a/sc/README.md +++ b/sc/README.md @@ -75,6 +75,7 @@ https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocume * LOOKUP * MATCH * VLOOKUP + * XLOOKUP * Mathematical Functions * SUMIF * SUMIFS diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h index eb3f590beb3c..3dfc8892aef6 100644 --- a/sc/inc/helpids.h +++ b/sc/inc/helpids.h @@ -593,5 +593,6 @@ inline constexpr OUString HID_FUNC_REGEX = u"SC_HID_FUNC_REGEX"_ustr; inline constexpr OUString HID_FUNC_FOURIER = u"SC_HID_FUNC_FOURIER"_ustr; inline constexpr OUString HID_FUNC_RAND_NV = u"SC_HID_FUNC_RAND_NV"_ustr; inline constexpr OUString HID_FUNC_RANDBETWEEN_NV = u"SC_HID_FUNC_RANDBETWEEN_NV"_ustr; +inline constexpr OUString HID_FUNC_XLOOKUP_MS = u"SC_HID_FUNC_XLOOKUP_MS"_ustr; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/inc/queryiter.hxx b/sc/inc/queryiter.hxx index 1d0066de7fb8..e34a7be20e13 100644 --- a/sc/inc/queryiter.hxx +++ b/sc/inc/queryiter.hxx @@ -62,7 +62,7 @@ class ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct > { protected: ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, ScInterpreterContext& rContext, - const ScQueryParam& rParam ); + const ScQueryParam& rParam, bool bReverseSearch ); // Initialize position for new column. void InitPos(); // Increase position (next row). @@ -71,12 +71,19 @@ protected: // should call IncPos(). void IncBlock(); + // Decrease position (prev row). + void DecPos(); + // Prev mdds block. If access is not direct/linear, then + // should call DecPos(). + void DecBlock(); + // These members needs to be available already in the base class. typedef sc::CellStoreType::const_position_type PositionType; PositionType maCurPos; ScQueryParam maParam; ScDocument& rDoc; ScInterpreterContext& mrContext; + bool mbReverseSearch; SCTAB nTab; SCCOL nCol; SCROW nRow; @@ -98,19 +105,24 @@ public: bool IncPosImpl(); protected: ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, ScInterpreterContext& rContext, - const ScQueryParam& rParam ); + const ScQueryParam& rParam, bool bReverseSearch ); void InitPosStart(); - void InitPosFinish( SCROW beforeRow, SCROW lastRow ); + void InitPosFinish( SCROW beforeRow, SCROW lastRow, bool bFirstMatch ); void IncPos() { IncPosImpl<false>(); } bool IncPosFast() { return IncPosImpl<true>(); } void IncBlock() { IncPos(); } // Cannot skip entire block, not linear. + // Initialize for backward search. (no need for SortedCache) + static void DecPos() {}; + static void DecBlock() {}; + // These members needs to be available already in the base class. typedef sc::CellStoreType::const_position_type PositionType; PositionType maCurPos; ScQueryParam maParam; ScDocument& rDoc; ScInterpreterContext& mrContext; + bool mbReverseSearch; SCTAB nTab; SCCOL nCol; SCROW nRow; @@ -163,17 +175,24 @@ protected: sal_uInt8 nTestEqualCondition; bool bAdvanceQuery; bool bIgnoreMismatchOnLeadingStrings; + bool bSortedBinarySearch; + bool bXLookUp; + SCCOL nBestFitCol; + SCROW nBestFitRow; // Make base members directly visible here (templated bases need 'this->'). using AccessBase::maCurPos; using AccessBase::maParam; using AccessBase::rDoc; using AccessBase::mrContext; + using AccessBase::mbReverseSearch; using AccessBase::nTab; using AccessBase::nCol; using AccessBase::nRow; using AccessBase::IncPos; using AccessBase::IncBlock; + using AccessBase::DecPos; + using AccessBase::DecBlock; using typename AccessBase::BinarySearchCellType; using AccessBase::MakeBinarySearchIndexer; using TypeBase::HandleItemFound; @@ -227,9 +246,14 @@ protected: bool IsEqualConditionFulfilled() const { return nTestEqualCondition == nTestEqualConditionFulfilled; } + void HandleBestFitItemFound(SCCOL nBFitCol, SCROW nBFitRow) + { + nBestFitCol = nBFitCol; + nBestFitRow = nBFitRow; + } public: ScQueryCellIteratorBase(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable, - const ScQueryParam& aParam, bool bMod); + const ScQueryParam& aParam, bool bMod, bool bReverse); // when !bMod, the QueryParam has to be filled // (bIsString) @@ -238,6 +262,12 @@ public: void SetAdvanceQueryParamEntryField( bool bVal ) { bAdvanceQuery = bVal; } void AdvanceQueryParamEntryField(); + + void SetSortedBinarySearchMode( bool bVal ) + { bSortedBinarySearch = bVal; } + + void SetXlookupMode( bool bVal ) + { bXLookUp = bVal; } }; @@ -259,11 +289,13 @@ class ScQueryCellIterator using Base::maParam; using Base::rDoc; using Base::mrContext; + using Base::mbReverseSearch; using Base::nTab; using Base::nCol; using Base::nRow; using Base::InitPos; using Base::IncPos; + using Base::DecPos; using Base::bIgnoreMismatchOnLeadingStrings; using Base::SetStopOnMismatch; using Base::SetTestEqualCondition; @@ -279,13 +311,17 @@ class ScQueryCellIterator using Base::nTestEqualConditionEnabled; using Base::PerformQuery; using Base::getThisResult; + using Base::nBestFitCol; + using Base::nBestFitRow; + using Base::bSortedBinarySearch; + using Base::bXLookUp; bool GetThis(); public: ScQueryCellIterator(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable, - const ScQueryParam& aParam, bool bMod) - : Base( rDocument, rContext, nTable, aParam, bMod ) {} + const ScQueryParam& aParam, bool bMod, bool bReverse) + : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {} bool GetFirst(); bool GetNext(); SCCOL GetCol() const { return nCol; } @@ -320,8 +356,8 @@ class ScQueryCellIteratorSortedCache typedef ScQueryCellIterator< ScQueryCellIteratorAccess::SortedCache > Base; public: ScQueryCellIteratorSortedCache(ScDocument& rDocument, ScInterpreterContext& rContext, - SCTAB nTable, const ScQueryParam& aParam, bool bMod) - : Base( rDocument, rContext, nTable, aParam, bMod ) {} + SCTAB nTable, const ScQueryParam& aParam, bool bMod, bool bReverse ) + : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {} // Returns true if this iterator can be used for the given query. static bool CanBeUsed(ScDocument& rDoc, const ScQueryParam& aParam, SCTAB nTab, const ScFormulaCell* cell, const ScComplexRefData* refData, @@ -357,8 +393,8 @@ protected: public: ScCountIfCellIterator(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable, - const ScQueryParam& aParam, bool bMod) - : Base( rDocument, rContext, nTable, aParam, bMod ) {} + const ScQueryParam& aParam, bool bMod, bool bReverse) + : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {} sal_uInt64 GetCount(); }; @@ -370,8 +406,8 @@ class ScCountIfCellIteratorSortedCache typedef ScCountIfCellIterator< ScQueryCellIteratorAccess::SortedCache > Base; public: ScCountIfCellIteratorSortedCache(ScDocument& rDocument, ScInterpreterContext& rContext, - SCTAB nTable, const ScQueryParam& aParam, bool bMod) - : Base( rDocument, rContext, nTable, aParam, bMod ) {} + SCTAB nTable, const ScQueryParam& aParam, bool bMod, bool bReverse) + : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {} // Returns true if this iterator can be used for the given query. static bool CanBeUsed(ScDocument& rDoc, const ScQueryParam& aParam, SCTAB nTab, const ScFormulaCell* cell, const ScComplexRefData* refData, diff --git a/sc/inc/scfuncs.hrc b/sc/inc/scfuncs.hrc index 8fb9f59e9029..279ba37b6b92 100644 --- a/sc/inc/scfuncs.hrc +++ b/sc/inc/scfuncs.hrc @@ -3377,6 +3377,24 @@ const TranslateId SC_OPCODE_V_LOOKUP_ARY[] = NC_("SC_OPCODE_V_LOOKUP", "If the value is TRUE or not given, the search column of the array represents a series of ranges, and must be sorted in ascending order.") }; +// -=*# Resource for function XLOOKUP #*=- +const TranslateId SC_OPCODE_X_LOOKUP_ARY[] = +{ + NC_("SC_OPCODE_X_LOOKUP", "Extended vertical search and reference to indicated cells."), + NC_("SC_OPCODE_X_LOOKUP", "Search criterion"), + NC_("SC_OPCODE_X_LOOKUP", "The value to be found in the first column."), + NC_("SC_OPCODE_X_LOOKUP", "Search Array"), + NC_("SC_OPCODE_X_LOOKUP", "The array or range to search."), + NC_("SC_OPCODE_X_LOOKUP", "Result Array"), + NC_("SC_OPCODE_X_LOOKUP", "The array or range to return."), + NC_("SC_OPCODE_X_LOOKUP", "Result if not found"), + NC_("SC_OPCODE_X_LOOKUP", "If given, return given text, otherwise return #N/A."), + NC_("SC_OPCODE_X_LOOKUP", "Match Mode"), + NC_("SC_OPCODE_X_LOOKUP", "0, -1, 1 or 2 "), // TODO : add explanation of values + NC_("SC_OPCODE_X_LOOKUP", "Search Mode"), + NC_("SC_OPCODE_X_LOOKUP", "1, -1, 2 or -2 ") // TODO : add explanation of values +}; + // -=*# Resource for function INDEX #*=- const TranslateId SC_OPCODE_INDEX_ARY[] = { diff --git a/sc/qa/extras/scfunctionlistobj.cxx b/sc/qa/extras/scfunctionlistobj.cxx index 940aba8c3983..03cd76733f9f 100644 --- a/sc/qa/extras/scfunctionlistobj.cxx +++ b/sc/qa/extras/scfunctionlistobj.cxx @@ -78,7 +78,7 @@ public: ScFunctionListObj::ScFunctionListObj() : UnoApiTest("/sc/qa/extras/testdocuments") , XElementAccess(cppu::UnoType<uno::Sequence<beans::PropertyValue>>::get()) - , XIndexAccess(395) + , XIndexAccess(396) , XNameAccess("IF") , XServiceInfo("stardiv.StarCalc.ScFunctionListObj", "com.sun.star.sheet.FunctionDescriptions") { diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods new file mode 100644 index 000000000000..16abcbcacb4b --- /dev/null +++ b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods @@ -0,0 +1,4553 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" 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:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT52M13S</meta:editing-duration><meta:editing-cycles>14</meta:editing-cycles><meta:generator>LibreOfficeDev/24.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/8f959fffda28199c3d97aea8d5468776a0e43d90</meta:generator><dc:date>2024-01-26T18:16:42.850000000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="754" 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">15882</config:config-item> + <config:config-item config:name="VisibleAreaHeight" config:type="int">5013</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">2</config:config-item> + <config:config-item config:name="CursorPositionY" config:type="int">0</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">65</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 config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item> + <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item> + <config:config-item config:name="IgnoreBreakAfterMultilineField" 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">0</config:config-item> + <config:config-item config:name="CursorPositionY" config:type="int">104</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">81</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">65</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 config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item> + <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item> + <config:config-item config:name="IgnoreBreakAfterMultilineField" 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">1835</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">65</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="ShowFormulasMarks" 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="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="FormulaBarHeight" config:type="short">1</config:config-item> + <config:config-item config:name="HasSheetTabs" config:type="boolean">true</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">1270</config:config-item> + <config:config-item config:name="RasterResolutionY" config:type="int">1270</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 config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item> + <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item> + <config:config-item config:name="IgnoreBreakAfterMultilineField" 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-map-indexed config:name="ForbiddenCharacters"> + <config:config-item-map-entry> + <config:config-item config:name="Language" config:type="string">en</config:config-item> + <config:config-item config:name="Country" config:type="string">US</config:config-item> + <config:config-item config:name="Variant" config:type="string"/> + <config:config-item config:name="BeginLine" config:type="string"/> + <config:config-item config:name="EndLine" config:type="string"/> + </config:config-item-map-entry> + </config:config-item-map-indexed> + <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">Microsoft Print to 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">ZBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEANhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABQFAMvAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDIACQDLBE/XXt+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAFNNVEoAAAAAEAC4AHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAsEQAAVjRETQEAAAAAAAAAnApwIhwAAADsAAAAAwAAAPoBTwg05ndNg+4HSBfANYHQAAAATAAAAAMAAAAACAAAAAAAAAAAAAADAAAAAAgAACoAAAAACAAAAwAAAEAAAABWAAAAABAAAEQAbwBjAHUAbQBlAG4AdABVAHMAZQByAFAAYQBzAHMAdwBvAHIAZAAAAEQAbwBjAHUAbQBlAG4AdABPAHcAbgBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AEMAcgB5AHAAdABTAGUAYwB1AHIAaQB0AHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBDT01QQVRfRFVQTEVYX01PREUTAER1cGxleE1vZGU6OlVua25vd24MAFBSSU5URVJfTkFNRRYATWljcm9zb2Z0IFByaW50IHRvIFBERgsARFJJVkVSX05BTUUWAE1pY3Jvc29mdCBQcmludCBUbyBQREY=</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">1270</config:config-item> + <config:config-item config:name="RasterResolutionY" config:type="int">1270</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="ShowFormulasMarks" 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="FreeSans" svg:font-family="FreeSans" 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"/> + <style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="'WenQuanYi Micro Hei'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="table-cell"> + <style:paragraph-properties style:tab-stop-distance="1.27cm"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-size="10pt" fo:language="en" fo:country="US" style:font-name-asian="WenQuanYi Micro Hei" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="FreeSans" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" style:writing-mode="page"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="page" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" loext:opacity="0%" fo:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-family-asian="'Segoe UI'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-family-complex="Tahoma" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:style style:name="Default" style:family="graphic"/> + <style:style style:name="Note" style:family="graphic" style:parent-style-name="Default"> + <style:graphic-properties draw:stroke="solid" draw:marker-start="Arrowheads_20_1" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:fill="solid" draw:fill-color="#ffffc0" draw:auto-grow-height="true" draw:auto-grow-width="false" fo:padding-top="0.1cm" fo:padding-bottom="0.1cm" fo:padding-left="0.1cm" fo:padding-right="0.1cm" draw:shadow="visible" draw:shadow-offset-x="0.1cm" draw:shadow-offset-y="0.1cm"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="'WenQuanYi Micro Hei'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="10pt" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="10pt"/> + </style:style> + <number:number-style style:name="N0"> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N149P0" 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="N149"> + <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="N149P0"/> + </number:currency-style> + <number:number-style style:name="N151P0" 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="N151"> + <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="N151P0"/> + </number:number-style> + <number:percentage-style style:name="N152"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N156P0" 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="N156P1" 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="N156P2" 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="N156"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N156P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N156P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N156P2"/> + </number:text-style> + <number:currency-style style:name="N158P0" 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="N158"> + <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="N158P0"/> + </number:currency-style> + <number:number-style style:name="N159"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N163P0" 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="N163P1" 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="N163P2" 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="N163"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N163P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N163P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N163P2"/> + </number:text-style> + <number:date-style style:name="N164"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N166P0" 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="N166"> + <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="N166P0"/> + </number:number-style> + <number:currency-style style:name="N168P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</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="N168"> + <number:currency-symbol number:language="nl" number:country="NL">€</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="N168P0"/> + </number:currency-style> + <number:number-style style:name="N170P0" 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="N170"> + <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="N170P0"/> + </number:number-style> + <number:number-style style:name="N174P0" 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="N174P1" 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="N174P2" style:volatile="true"> + <number:text> - </number:text> + </number:number-style> + <number:text-style style:name="N174"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N174P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N174P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N174P2"/> + </number:text-style> + <number:date-style style:name="N175"> + <number:text>⌀ </number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N179P0" 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="N179P1" 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="N179P2" style:volatile="true"> + <number:text> - € </number:text> + </number:number-style> + <number:text-style style:name="N179"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N179P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N179P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N179P2"/> + </number:text-style> + <number:number-style style:name="N180"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N181"> + <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:currency-style style:name="N182P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</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="N182"> + <style:text-properties fo:color="#ff0000"/> + <number:currency-symbol number:language="nl" number:country="NL">€</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:text>-</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N182P0"/> + </number:currency-style> + <number:date-style style:name="N183"> + <number:month number:style="long"/> + <number:text>-</number:text> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N185P0" 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="N185"> + <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="N185P0"/> + </number:currency-style> + <number:date-style style:name="N186"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:style="long"/> + </number:date-style> + <number:number-style style:name="N187"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N188"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N192P0" 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="N192P1" style:volatile="true"> + <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="N192P2" 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="N192"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N192P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N192P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N192P2"/> + </number:text-style> + <number:currency-style style:name="N194P0" style:volatile="true"> + <number:currency-symbol>€</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:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N194"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol>€</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:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N194P0"/> + </number:currency-style> + <number:number-style style:name="N195"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N196"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N197"> + <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="N198P0" 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="N198"> + <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="N198P0"/> + </number:number-style> + <number:currency-style style:name="N200P0" 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="N200"> + <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="N200P0"/> + </number:currency-style> + <number:currency-style style:name="N202P0" style:volatile="true"> + <number:currency-symbol number:language="es" number:country="MX">$</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="N202"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="es" number:country="MX">$</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="N202P0"/> + </number:currency-style> + <number:number-style style:name="N206P0" 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="N206P1" 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="N206P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N206"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N206P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N206P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N206P2"/> + </number:text-style> + <number:currency-style style:name="N208P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" 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="N208"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" 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="N208P0"/> + </number:currency-style> + <number:number-style style:name="N210P0" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N210P1" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N210"> + <number:text>No</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N210P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N210P1"/> + </number:number-style> + <number:number-style style:name="N211"> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N212"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N214P0" 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>EUR</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N214"> + <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>EUR</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N214P0"/> + </number:currency-style> + <number:number-style style:name="N216P0" 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="N216"> + <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="N216P0"/> + </number:number-style> + <number:number-style style:name="N218P0" 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="N218"> + <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="N218P0"/> + </number:number-style> + <number:number-style style:name="N222P0" 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="N222P1" 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="N222P2" 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="N222"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N222P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N222P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N222P2"/> + </number:text-style> + <number:number-style style:name="N223"> + <number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N224"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N225"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="3" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N227P0" 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="N227P1" 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="N227P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N227"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N227P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N227P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N227P2"/> + </number:text-style> + <number:currency-style style:name="N228P0" 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="N228"> + <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="N228P0"/> + </number:currency-style> + <number:number-style style:name="N229"> + <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="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N230"> + <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:currency-style style:name="N232P0" 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>EUR</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N232"> + <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>EUR</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N232P0"/> + </number:currency-style> + <number:number-style style:name="N233P0" 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="N233"> + <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="N233P0"/> + </number:number-style> + <number:date-style style:name="N234"> + <number:month number:style="long"/> + <number:text>-</number:text> + <number:day/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:number-style style:name="N238P0" 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="N238P1" 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="N238P2" 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="N238"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N238P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N238P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N238P2"/> + </number:text-style> + <number:number-style style:name="N242P0" 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="N242P1" 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="N242P2" style:volatile="true"> + <number:text> $- </number:text> + </number:number-style> + <number:text-style style:name="N242"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N242P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N242P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N242P2"/> + </number:text-style> + <number:date-style style:name="N243"> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N244"> + <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N246P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <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:currency-style> + <number:currency-style style:name="N246"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <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"/> + <style:map style:condition="value()>=0" style:apply-style-name="N246P0"/> + </number:currency-style> + <number:number-style style:name="N248P0" style:volatile="true"> + <number:text>On</number:text> + </number:number-style> + <number:number-style style:name="N248P1" style:volatile="true"> + <number:text>On</number:text> + </number:number-style> + <number:number-style style:name="N248"> + <number:text>Off</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N248P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N248P1"/> + </number:number-style> + <number:number-style style:name="N250P0" 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="N250"> + <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="N250P0"/> + </number:number-style> + <number:number-style style:name="N252P0" 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="N252"> + <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="N252P0"/> + </number:number-style> + <number:number-style style:name="N253"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N254P0" 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="N254"> + <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="N254P0"/> + </number:number-style> + <number:number-style style:name="N255P0" 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="N255"> + <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="N255P0"/> + </number:number-style> + <number:number-style style:name="N256"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N258P0" 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="N258P1" style:volatile="true"> + <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="N258P2" 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="N258"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N258P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N258P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N258P2"/> + </number:text-style> + <number:currency-style style:name="N259P0" 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="N259"> + <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="N259P0"/> + </number:currency-style> + <number:number-style style:name="N260"> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N262P0" style:volatile="true"> + <number:text>True</number:text> + </number:number-style> + <number:number-style style:name="N262P1" style:volatile="true"> + <number:text>True</number:text> + </number:number-style> + <number:number-style style:name="N262"> + <number:text>False</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N262P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N262P1"/> + </number:number-style> + <number:number-style style:name="N266P0" 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="N266P1" 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="N266P2" 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="N266"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N266P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N266P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N266P2"/> + </number:text-style> + <number:number-style style:name="N267"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N271P0" 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="N271P1" 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="N271P2" style:volatile="true"> + <number:text> - </number:text> + </number:number-style> + <number:text-style style:name="N271"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N271P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N271P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N271P2"/> + </number:text-style> + <number:date-style style:name="N272"> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N273P0" 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="N273"> + <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="N273P0"/> + </number:currency-style> + <number:currency-style style:name="N275P0" 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:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N275"> + <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:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N275P0"/> + </number:currency-style> + <number:number-style style:name="N279P0" 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="N279P1" 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="N279P2" 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="N279"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N279P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N279P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N279P2"/> + </number:text-style> + <number:number-style style:name="N283P0" 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="N283P1" 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="N283P2" 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="N283"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N283P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N283P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N283P2"/> + </number:text-style> + <number:number-style style:name="N285P0" style:volatile="true"> + <number:text>WAHR</number:text> + </number:number-style> + <number:number-style style:name="N285P1" style:volatile="true"> + <number:text>WAHR</number:text> + </number:number-style> + <number:number-style style:name="N285"> + <number:text>FALSCH</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N285P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N285P1"/> + </number:number-style> + <number:date-style style:name="N286"> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N288P0" 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="fr" number:country="FR">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N288"> + <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="N288P0"/> + </number:currency-style> + <number:currency-style style:name="N290P0" 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="N290"> + <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="N290P0"/> + </number:currency-style> + <number:number-style style:name="N291"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N294P0" 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="N294P1" 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="N294P2" 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="N294"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N294P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N294P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N294P2"/> + </number:text-style> + <number:time-style style:name="N295"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long" number:decimal-places="1"/> + </number:time-style> + <number:time-style style:name="N296"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:currency-style style:name="N298P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <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:currency-style> + <number:currency-style style:name="N298"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <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"/> + <style:map style:condition="value()>=0" style:apply-style-name="N298P0"/> + </number:currency-style> + <number:number-style style:name="N299P0" 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="N299"> + <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="N299P0"/> + </number:number-style> + <number:currency-style style:name="N301P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <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="N301"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <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="N301P0"/> + </number:currency-style> + <number:currency-style style:name="N303P0" 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="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N303"> + <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="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N303P0"/> + </number:currency-style> + <number:number-style style:name="N304"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N305"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N306P0" 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="N306"> + <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="N306P0"/> + </number:number-style> + <number:currency-style style:name="N307P0" 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="N307"> + <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="N307P0"/> + </number:currency-style> + <number:time-style style:name="N308" number:truncate-on-overflow="false"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-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:date-style style:name="N10129" number:language="en" number:country="US"> + <number:month/> + <number:text>/</number:text> + <number:day/> + <number:text>/</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:date-style style:name="N10130" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N10131" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N10132" number:language="en" number:country="US"> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N10133" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N10134" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N10135" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:time-style> + <number:time-style style:name="N10136" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:date-style style:name="N10137" number:language="en" number:country="US"> + <number:month/> + <number:text>/</number:text> + <number:day/> + <number:text>/</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N10139P0" style:volatile="true" number:language="en" number:country="US"> + <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="N10139" number:language="en" number:country="US"> + <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="N10139P0"/> + </number:number-style> + <number:number-style style:name="N10141P0" style:volatile="true" number:language="en" number:country="US"> + <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="N10141" number:language="en" number:country="US"> + <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="N10141P0"/> + </number:number-style> + <number:currency-style style:name="N10143P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <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-style> + <number:currency-style style:name="N10143" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:currency-symbol/> + <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="N10143P0"/> + </number:currency-style> + <number:currency-style style:name="N10144P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <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-style> + <number:currency-style style:name="N10144" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol/> + <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="N10144P0"/> + </number:currency-style> + <number:currency-style style:name="N10146P0" style:volatile="true" 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> + </number:currency-style> + <number:currency-style style:name="N10146" number:language="en" number:country="US"> + <number:text>(</number:text> + <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="N10146P0"/> + </number:currency-style> + <number:currency-style style:name="N10147P0" style:volatile="true" 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> + </number:currency-style> + <number:currency-style style:name="N10147" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <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="N10147P0"/> + </number:currency-style> + <number:number-style style:name="N10148P0" style:volatile="true" number:language="en" number:country="US"> + <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="N10148" number:language="en" number:country="US"> + <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="N10148P0"/> + </number:number-style> + <number:number-style style:name="N10149P0" style:volatile="true" number:language="en" number:country="US"> + <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="N10149" number:language="en" number:country="US"> + <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="N10149P0"/> + </number:number-style> + <number:number-style style:name="N10153P0" style:volatile="true" number:language="en" number:country="US"> + <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="N10153P1" style:volatile="true" number:language="en" number:country="US"> + <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="N10153P2" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N10153" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10153P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10153P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10153P2"/> + </number:text-style> + <number:currency-style style:name="N10157P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <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:currency-style> + <number:currency-style style:name="N10157P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <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:currency-style> + <number:currency-style style:name="N10157P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:currency-style> + <number:text-style style:name="N10157" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10157P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10157P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10157P2"/> + </number:text-style> + <number:number-style style:name="N10161P0" style:volatile="true" number:language="en" number:country="US"> + <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="N10161P1" style:volatile="true" number:language="en" number:country="US"> + <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="N10161P2" style:volatile="true" number:language="en" number:country="US"> + <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="N10161" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10161P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10161P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10161P2"/> + </number:text-style> + <number:currency-style style:name="N10165P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <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:currency-style> + <number:currency-style style:name="N10165P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <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:currency-style> + <number:currency-style style:name="N10165P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <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:currency-style> + <number:text-style style:name="N10165" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10165P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10165P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10165P2"/> + </number:text-style> + <number:number-style style:name="N10166" number:language="en" number:country="US"> + <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" 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="N10167" number:language="en" number:country="US"> + <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:date-style style:name="N20114" number:language="de" number:country="DE"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N20115" number:language="de" number:country="DE"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N20116" number:language="de" number:country="DE"> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N20117" number:language="de" number:country="DE"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N20118" number:language="de" number:country="DE"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:number-style style:name="N20120P0" style:volatile="true" number:language="de" number:country="DE"> + <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="N20120" number:language="de" number:country="DE"> + <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="N20120P0"/> + </number:number-style> + <number:number-style style:name="N20121P0" style:volatile="true" number:language="de" number:country="DE"> + <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="N20121" number:language="de" number:country="DE"> + <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="N20121P0"/> + </number:number-style> + <number:number-style style:name="N20123P0" style:volatile="true" number:language="de" number:country="DE"> + <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="N20123" number:language="de" number:country="DE"> + <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="N20123P0"/> + </number:number-style> + <number:number-style style:name="N20124P0" style:volatile="true" number:language="de" number:country="DE"> + <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="N20124" number:language="de" number:country="DE"> + <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="N20124P0"/> + </number:number-style> + <number:number-style style:name="N20126P0" style:volatile="true" number:language="de" number:country="DE"> + <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="N20126" number:language="de" number:country="DE"> + <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="N20126P0"/> + </number:number-style> + <number:number-style style:name="N20127P0" style:volatile="true" number:language="de" number:country="DE"> + <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="N20127" number:language="de" number:country="DE"> + <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="N20127P0"/> + </number:number-style> + <number:number-style style:name="N20129P0" style:volatile="true" number:language="de" number:country="DE"> + <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="N20129" number:language="de" number:country="DE"> + <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="N20129P0"/> + </number:number-style> + <number:number-style style:name="N20130P0" style:volatile="true" number:language="de" number:country="DE"> + <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="N20130" number:language="de" number:country="DE"> + <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="N20130P0"/> + </number:number-style> + <style:style style:name="Default" style:family="table-cell"/> + <style:style style:name="Heading" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold" style:font-size-asian="24pt" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-size-complex="24pt" style:font-style-complex="normal" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="table-cell" style:parent-style-name="Heading"> + <style:text-properties fo:font-size="18pt" style:font-size-asian="18pt" style:font-size-complex="18pt"/> + </style:style> + <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="table-cell" style:parent-style-name="Heading"> + <style:text-properties fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/> + </style:style> + <style:style style:name="Text" style:family="table-cell" style:parent-style-name="Default"/> + <style:style style:name="Note" style:family="table-cell" style:parent-style-name="Text"> + <style:table-cell-properties fo:background-color="#ffffcc" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border="0.74pt solid #808080"/> + <style:text-properties fo:color="#333333"/> + </style:style> + <style:style style:name="Footnote" style:family="table-cell" style:parent-style-name="Text"> + <style:text-properties fo:color="#808080" fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Hyperlink" style:family="table-cell" style:parent-style-name="Text"> + <style:text-properties fo:color="#0000ee" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="#0000ee"/> + </style:style> + <style:style style:name="Status" style:family="table-cell" style:parent-style-name="Default"/> + <style:style style:name="Good" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ccffcc"/> + <style:text-properties fo:color="#006600"/> + </style:style> + <style:style style:name="Neutral" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ffffcc"/> + <style:text-properties fo:color="#996600"/> + </style:style> + <style:style style:name="Bad" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ffcccc"/> + <style:text-properties fo:color="#cc0000"/> + </style:style> + <style:style style:name="Warning" style:family="table-cell" style:parent-style-name="Status"> + <style:text-properties fo:color="#cc0000"/> + </style:style> + <style:style style:name="Error" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#cc0000"/> + <style:text-properties fo:color="#ffffff" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Accent" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Accent_20_1" style:display-name="Accent 1" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#000000"/> + <style:text-properties fo:color="#ffffff"/> + </style:style> + <style:style style:name="Accent_20_2" style:display-name="Accent 2" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#808080"/> + <style:text-properties fo:color="#ffffff"/> + </style:style> + <style:style style:name="Accent_20_3" style:display-name="Accent 3" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#dddddd"/> + </style:style> + <style:style style:name="Result" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-style="italic" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-style-complex="italic" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="false" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:background-color="#ff3333"/> + </style:style> + <style:style style:name="true" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:background-color="#99ff66"/> + </style:style> + <draw:marker draw:name="Arrowheads_20_1" draw:display-name="Arrowheads 1" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/> + <loext:theme loext:name="Office"> + <loext:theme-colors loext:name="LibreOffice"> + <loext:color loext:name="dark1" loext:color="#000000"/> + <loext:color loext:name="light1" loext:color="#ffffff"/> + <loext:color loext:name="dark2" loext:color="#000000"/> + <loext:color loext:name="light2" loext:color="#ffffff"/> + <loext:color loext:name="accent1" loext:color="#18a303"/> + <loext:color loext:name="accent2" loext:color="#0369a3"/> + <loext:color loext:name="accent3" loext:color="#a33e03"/> + <loext:color loext:name="accent4" loext:color="#8e03a3"/> + <loext:color loext:name="accent5" loext:color="#c99c00"/> + <loext:color loext:name="accent6" loext:color="#c9211e"/> + <loext:color loext:name="hyperlink" loext:color="#0000ee"/> + <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/> + </loext:theme-colors> + </loext:theme> + </office:styles> + <office:automatic-styles> + <style:style style:name="co1" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="3.884cm"/> + </style:style> + <style:style style:name="co2" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="1.365cm"/> + </style:style> + <style:style style:name="co3" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="10.633cm"/> + </style:style> + <style:style style:name="co4" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="2.258cm"/> + </style:style> + <style:style style:name="co5" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="3.341cm"/> + </style:style> + <style:style style:name="co6" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="1.473cm"/> + </style:style> + <style:style style:name="co7" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="13.19cm"/> + </style:style> + <style:style style:name="co8" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="5.657cm"/> + </style:style> + <style:style style:name="ro1" style:family="table-row"> + <style:table-row-properties style:row-height="1.614cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro2" style:family="table-row"> + <style:table-row-properties style:row-height="0.452cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro3" style:family="table-row"> + <style:table-row-properties style:row-height="0.612cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro4" style:family="table-row"> + <style:table-row-properties style:row-height="0.529cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro5" style:family="table-row"> + <style:table-row-properties style:row-height="1.656cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ta1" style:family="table" style:master-page-name="Default"> + <style:table-properties table:display="true" style:writing-mode="lr-tb"/> + </style:style> + <number:number-style style:name="N2"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + </number:number-style> + <number:boolean-style style:name="N99"> + <number:boolean/> + </number:boolean-style> + <style:style style:name="ce9" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:wrap-option="wrap"/> + <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce11" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce14" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> + </style:style> + <style:style style:name="ce5" style:family="table-cell" style:parent-style-name="Default"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> + </style:style> + <style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> + </style:style> + <style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> + </style:style> + <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + </style:style> + <style:style style:name="ce10" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/> + <style:style style:name="ce18" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.C2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.C2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.C2"/> + </style:style> + <style:style style:name="ce12" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:wrap-option="wrap"/> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties style:writing-mode="lr-tb"/> + <style:header-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm"/> + </style:header-style> + <style:footer-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm"/> + </style:footer-style> + </style:page-layout> + <style:page-layout style:name="pm2"> + <style:page-layout-properties style:writing-mode="lr-tb"/> + <style:header-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0"> + <style:background-image/> + </style:header-footer-properties> + </style:header-style> + <style:footer-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0"> + <style:background-image/> + </style:header-footer-properties> + </style:footer-style> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Default" style:page-layout-name="pm1"> + <style:header> + <text:p><text:sheet-name>???</text:sheet-name></text:p> + </style:header> + <style:header-left style:display="false"/> + <style:header-first style:display="false"/> + <style:footer> + <text:p>Page <text:page-number>1</text:page-number></text:p> + </style:footer> + <style:footer-left style:display="false"/> + <style:footer-first style:display="false"/> + </style:master-page> + <style:master-page style:name="Report" style:page-layout-name="pm2"> + <style:header> + <style:region-left> + <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p> + </style:region-left> + <style:region-right> + <text:p><text:date style:data-style-name="N2" text:date-value="2024-01-26">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="18:11:05.851000000">00:00:00</text:time></text:p> + </style:region-right> + </style:header> + <style:header-left style:display="false"/> + <style:header-first style:display="false"/> + <style:footer> + <text:p>Page <text:page-number>1</text:page-number><text:s/>/ <text:page-count>99</text:page-count></text:p> + </style:footer> + <style:footer-left style:display="false"/> + <style:footer-first style:display="false"/> + </style:master-page> + </office:master-styles> + <office:body> + <office:spreadsheet> + <table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/> + <table:table table:name="Sheet1" table:style-name="ta1"> + <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co2" table:default-cell-style-name="ce5"/> + <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/> + <table:table-row table:style-name="ro1"> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> + <text:p>XLOOKUP Function</text:p> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro3"> + <table:table-cell table:style-name="ce11" office:value-type="string" calcext:value-type="string"> + <text:p>Result</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="3"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro4"> + <table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string"> + <text:p>Sheet</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>Result</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string"> + <text:p>Description</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <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="ce14" table:formula="of:=AND([Sheet2.C2:.C201])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce22" office:value-type="string" calcext:value-type="string"> + <text:p>Simple XLOOKUP formulas with local references and values</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="20"> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="21"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <calcext:conditional-formats> + <calcext:conditional-format calcext:target-range-address="Sheet1.B3:Sheet1.B50"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet1.B3"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet1.B3"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet1.B3"/> + </calcext:conditional-format> + </calcext:conditional-formats> + </table:table> + <table:table table:name="Sheet2" table:style-name="ta1"> + <table:table-column table:style-name="co5" table:number-columns-repeated="2" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co6" table:default-cell-style-name="ce10"/> + <table:table-column table:style-name="co7" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co8" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:number-columns-repeated="15" table:default-cell-style-name="Default"/> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Function</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Expected</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Correct</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>FunctionString</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Comment</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>XL-test</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Country</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Abr</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Prefix</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Asc</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Desc</text:p> + </table:table-cell> + <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="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="6"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G2];[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+55" calcext:value-type="string"> + <text:p>+55</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+55</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A2]=[.B2]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A2])" office:value-type="string" office:string-value="=XLOOKUP(G2;H2:H11;J2:J11)" calcext:value-type="string"> + <text:p>=XLOOKUP(G2;H2:H11;J2:J11)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Brazil</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>China</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>CN</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+86</text:p> + </table:table-cell> + <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 office:value-type="float" office:value="10" calcext:value-type="float"> + <text:p>10</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("India";[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+91" calcext:value-type="string"> + <text:p>+91</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+91</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A3]=[.B3]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A3])" office:value-type="string" office:string-value="=XLOOKUP("India";H2:H11;J2:J11)" calcext:value-type="string"> + <text:p>=XLOOKUP("India";H2:H11;J2:J11)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>India</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>IN</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+91</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 office:value-type="float" office:value="9" calcext:value-type="float"> + <text:p>9</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("INDIA";[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+91" calcext:value-type="string"> + <text:p>+91</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+91</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A4]=[.B4]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A4])" office:value-type="string" office:string-value="=XLOOKUP("INDIA";H2:H11;J2:J11)" calcext:value-type="string"> + <text:p>=XLOOKUP("INDIA";H2:H11;J2:J11)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>United States</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>US</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+1</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 office:value-type="float" office:value="8" calcext:value-type="float"> + <text:p>8</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Ireland";[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A5])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A5])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11)" calcext:value-type="string"> + <text:p>=XLOOKUP("Ireland";H2:H11;J2:J11)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Nigeria</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>NG2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>00234</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-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Ireland";[.H2:.H11];[.J2:.J11];"")"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p/> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A6]=[.B6]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A6])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;"")" calcext:value-type="string"> + <text:p>=XLOOKUP("Ireland";H2:H11;J2:J11;"")</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Indonesia</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>ID</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+62</text:p> + </table:table-cell> + <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 office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Ireland";[.H2:.H11];[.J2:.J11];-99)" office:value-type="float" office:value="-99" calcext:value-type="float"> + <text:p>-99</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-99" calcext:value-type="float"> + <text:p>-99</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A7]=[.B7]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A7])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;-99)" calcext:value-type="string"> + <text:p>=XLOOKUP("Ireland";H2:H11;J2:J11;-99)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Brazil</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>BR</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+55</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Ireland";[.H2:.H11];[.J2:.J11];"Not here")" office:value-type="string" office:string-value="Not here" calcext:value-type="string"> + <text:p>Not here</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Not here</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A8]=[.B8]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A8])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;"Not here")" calcext:value-type="string"> + <text:p>=XLOOKUP("Ireland";H2:H11;J2:J11;"Not here")</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Pakistan</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>PK</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+92</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <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:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("";[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A9])" office:value-type="string" office:string-value="=XLOOKUP("";H2:H11;J2:J11)" calcext:value-type="string"> + <text:p>=XLOOKUP("";H2:H11;J2:J11)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Nigeria</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>NG</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+234</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</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-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Nigeria";[.H2:.H11];[.J2:.J11];;;1)" office:value-type="string" office:string-value="00234" calcext:value-type="string"> + <text:p>00234</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>00234</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A10]=[.B10]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="=XLOOKUP("Nigeria";H2:H11;J2:J11;;;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("Nigeria";H2:H11;J2:J11;;;1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Bangladesh</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>BD</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+880</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="8" calcext:value-type="float"> + <text:p>8</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:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Nigeria";[.H2:.H11];[.J2:.J11];;;-1)" office:value-type="string" office:string-value="+234" calcext:value-type="string"> + <text:p>+234</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+234</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A11]=[.B11]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A11])" office:value-type="string" office:string-value="=XLOOKUP("Nigeria";H2:H11;J2:J11;;;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP("Nigeria";H2:H11;J2:J11;;;-1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Russia</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>RU</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+7</text:p> + </table:table-cell> + <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 office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Mexico</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>MX</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>+52</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="10" calcext:value-type="float"> + <text:p>10</text:p> + </table:table-cell> + <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:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4390;[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Ned Lanning" calcext:value-type="string"> + <text:p>Ned Lanning</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Ned Lanning</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A14]=[.B14]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="{=XLOOKUP(4390;I14:R14;I15:R16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(4390;I14:R14;I15:R16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="float" office:value="8299" calcext:value-type="float"> + <text:p>8299</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>EmpID</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4390" calcext:value-type="float"> + <text:p>4390</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="8604" calcext:value-type="float"> + <text:p>8604</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="8389" calcext:value-type="float"> + <text:p>8389</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4937" calcext:value-type="float"> + <text:p>4937</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="8299" calcext:value-type="float"> + <text:p>8299</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2643" calcext:value-type="float"> + <text:p>2643</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5243" calcext:value-type="float"> + <text:p>5243</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="9693" calcext:value-type="float"> + <text:p>9693</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1636" calcext:value-type="float"> + <text:p>1636</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6703" calcext:value-type="float"> + <text:p>6703</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="Marketing" calcext:value-type="string"> + <text:p>Marketing</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Marketing</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A15]=[.B15]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A15])" office:value-type="string" office:string-value="{=XLOOKUP(4390;I14:R14;I15:R16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(4390;I14:R14;I15:R16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Name</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Ned Lanning</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Margo Hendrix</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Dianne Pugh</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Earlene McCartney</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Mia Arnold</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Jorge Fellows</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Rose Winters</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Carmela Hahn</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Delia Cochran</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Marguerite Cervantes</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G14];[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Mia Arnold" calcext:value-type="string"> + <text:p>Mia Arnold</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Mia Arnold</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A16]=[.B16]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="{=XLOOKUP(G14;I14:R14;I15:R16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(G14;I14:R14;I15:R16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Dept</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Marketing</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Sales</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Finance</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Accounting</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Operations</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Executive</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Sales</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Finance</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Accounting</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Marketing</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="Operations" calcext:value-type="string"> + <text:p>Operations</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Operations</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A17]=[.B17]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="{=XLOOKUP(G14;I14:R14;I15:R16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(G14;I14:R14;I15:R16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G18];[.I14:.R14];[.I15:.R16];"ID not found")" office:value-type="string" office:string-value="ID not found" calcext:value-type="string"> + <text:p>ID not found</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>ID not found</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A18]=[.B18]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}" calcext:value-type="string"> + <text:p>{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="float" office:value="5678" calcext:value-type="float"> + <text:p>5678</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="13"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="ID not found" calcext:value-type="string"> + <text:p>ID not found</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>ID not found</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A19]=[.B19]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}" calcext:value-type="string"> + <text:p>{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP("";[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="{=XLOOKUP("";I14:R14;I15:R16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP("";I14:R14;I15:R16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="{=XLOOKUP("";I14:R14;I15:R16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP("";I14:R14;I15:R16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16];;1)" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string"> + <text:p>Earlene McCartney</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Earlene McCartney</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A22]=[.B22]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A22])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;1)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;1)}</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string"> + <text:p>Accounting</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Accounting</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A23]=[.B23]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A23])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;1)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;1)}</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16];;-1)" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string"> + <text:p>Earlene McCartney</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Earlene McCartney</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A24]=[.B24]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A24])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string"> + <text:p>Accounting</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Accounting</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A25]=[.B25]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A25])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string"> + <text:p>Earlene McCartney</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Earlene McCartney</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A26]=[.B26]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A26])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(4937;I14:R14;I15:R16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string"> + <text:p>Accounting</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Accounting</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A27]=[.B27]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A27])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(4937;I14:R14;I15:R16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;1;1)" office:value-type="float" office:value="0.24" calcext:value-type="float"> + <text:p>0,24</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float"> + <text:p>0,24</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A29]=[.B29]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A29])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(G29;I30:I35;H30:H35;;1;1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="float" office:value="46523" calcext:value-type="float"> + <text:p>46523</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>tax rate</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>max income</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;1;2)" office:value-type="float" office:value="0.24" calcext:value-type="float"> + <text:p>0,24</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float"> + <text:p>0,24</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" office:value-type="string" calcext:value-type="string"> + <text:p/> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A30])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;1;2)" calcext:value-type="string"> + <text:p>=XLOOKUP(G29;I30:I35;H30:H35;;1;2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="float" office:value="0.1" calcext:value-type="float"> + <text:p>0,1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-9700" calcext:value-type="float"> + <text:p>-9700</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;-1;2)" office:value-type="float" office:value="0.22" calcext:value-type="float"> + <text:p>0,22</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.22" calcext:value-type="float"> + <text:p>0,22</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A31]=[.B31]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A31])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;-1;2)" calcext:value-type="string"> + <text:p>=XLOOKUP(G29;I30:I35;H30:H35;;-1;2)</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="float" office:value="0.22" calcext:value-type="float"> + <text:p>0,22</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="39475" calcext:value-type="float"> + <text:p>39475</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;2;2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A32])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A32])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;2;2)" calcext:value-type="string"> + <text:p>=XLOOKUP(G29;I30:I35;H30:H35;;2;2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float"> + <text:p>0,24</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="84200" calcext:value-type="float"> + <text:p>84200</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="float" office:value="0.32" calcext:value-type="float"> + <text:p>0,32</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="160726" calcext:value-type="float"> + <text:p>160726</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="float" office:value="0.35" calcext:value-type="float"> + <text:p>0,35</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="204100" calcext:value-type="float"> + <text:p>204100</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="float" office:value="0.37" calcext:value-type="float"> + <text:p>0,37</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="510300" calcext:value-type="float"> + <text:p>510300</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="25000" calcext:value-type="float"> + <text:p>25000</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="25000" calcext:value-type="float"> + <text:p>25000</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A37]=[.B37]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="=XLOOKUP(K37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string"> + <text:p>=XLOOKUP(K37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Q1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>income stmnt</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Total sales</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cost of sales</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>gross profit</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>depriciation</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>interest</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>earnings before tax</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>tax</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>net profit</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>profit [%]</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.S37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="19342" calcext:value-type="float"> + <text:p>19342</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="19342" calcext:value-type="float"> + <text:p>19342</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A38]=[.B38]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="=XLOOKUP(S37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string"> + <text:p>=XLOOKUP(S37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Q1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="50000" calcext:value-type="float"> + <text:p>50000</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-25000" calcext:value-type="float"> + <text:p>-25000</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="25000" calcext:value-type="float"> + <text:p>25000</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-899" calcext:value-type="float"> + <text:p>-899</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-513" calcext:value-type="float"> + <text:p>-513</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="23588" calcext:value-type="float"> + <text:p>23588</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-4246" calcext:value-type="float"> + <text:p>-4246</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="19342" calcext:value-type="float"> + <text:p>19342</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.293" calcext:value-type="float"> + <text:p>0,293</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.T37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="0.293" calcext:value-type="float"> + <text:p>0,293</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.293" calcext:value-type="float"> + <text:p>0,293</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A39]=[.B39]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="=XLOOKUP(T37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string"> + <text:p>=XLOOKUP(T37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Q2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="78200" calcext:value-type="float"> + <text:p>78200</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-42050" calcext:value-type="float"> + <text:p>-42050</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="36150" calcext:value-type="float"> + <text:p>36150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-791" calcext:value-type="float"> + <text:p>-791</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-853" calcext:value-type="float"> + <text:p>-853</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="34506" calcext:value-type="float"> + <text:p>34506</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-6211" calcext:value-type="float"> + <text:p>-6211</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="28295" calcext:value-type="float"> + <text:p>28295</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.278" calcext:value-type="float"> + <text:p>0,278</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Q3</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="89500" calcext:value-type="float"> + <text:p>89500</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-59450" calcext:value-type="float"> + <text:p>-59450</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="30050" calcext:value-type="float"> + <text:p>30050</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-202" calcext:value-type="float"> + <text:p>-202</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-150" calcext:value-type="float"> + <text:p>-150</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="29698" calcext:value-type="float"> + <text:p>29698</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-5346" calcext:value-type="float"> + <text:p>-5346</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="24352" calcext:value-type="float"> + <text:p>24352</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.234" calcext:value-type="float"> + <text:p>0,234</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G14];[.$H14:.$R14];[.$H$15:.$R$16])" office:value-type="string" office:string-value="Mia Arnold" calcext:value-type="string"> + <text:p>Mia Arnold</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Mia Arnold</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A41]=[.B41]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A41])" office:value-type="string" office:string-value="{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Q4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="91250" calcext:value-type="float"> + <text:p>91250</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-60450" calcext:value-type="float"> + <text:p>-60450</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="30800" calcext:value-type="float"> + <text:p>30800</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-412" calcext:value-type="float"> + <text:p>-412</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-956" calcext:value-type="float"> + <text:p>-956</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="29432" calcext:value-type="float"> + <text:p>29432</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-5298" calcext:value-type="float"> + <text:p>-5298</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="24134" calcext:value-type="float"> + <text:p>24134</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.276" calcext:value-type="float"> + <text:p>0,276</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="Operations" calcext:value-type="string"> + <text:p>Operations</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Operations</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A42]=[.B42]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}" calcext:value-type="string"> + <text:p>{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Total</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="308950" calcext:value-type="float"> + <text:p>308950</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-186950" calcext:value-type="float"> + <text:p>-186950</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="122000" calcext:value-type="float"> + <text:p>122000</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-2304" calcext:value-type="float"> + <text:p>-2304</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-2472" calcext:value-type="float"> + <text:p>-2472</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="117224" calcext:value-type="float"> + <text:p>117224</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="-21101" calcext:value-type="float"> + <text:p>-21101</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="96123" calcext:value-type="float"> + <text:p>96123</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.27025" calcext:value-type="float"> + <text:p>0,27025</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:formula="of:=SUM(COM.MICROSOFT.XLOOKUP([.G44];[.H45:.H49];[.K45:.K49]):COM.MICROSOFT.XLOOKUP([.G45];[.H45:.H49];[.K45:.K49]))" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:502</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="11070" calcext:value-type="float"> + <text:p>11070</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="=SUM(XLOOKUP(G44;H45:H49;K45:K49):XLOOKUP(G45;H45:H49;K45:K49))" calcext:value-type="string"> + <text:p>=SUM(XLOOKUP(G44;H45:H49;K45:K49):XLOOKUP(G45;H45:H49;K45:K49))</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce12" office:value-type="string" calcext:value-type="string"> + <text:p>XLOOKUP should (in this case) return a range (TODO: Missing feature from Calc: Evaluate Formula)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Grape</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>product</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>qty</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>price</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>total</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="9"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Banana</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Apple</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="23" calcext:value-type="float"> + <text:p>23</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.52" calcext:value-type="float"> + <text:p>0,52</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=[.I45]*[.J45]" office:value-type="float" office:value="11.96" calcext:value-type="float"> + <text:p>11,96</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="9"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Grape</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="98" calcext:value-type="float"> + <text:p>98</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.77" calcext:value-type="float"> + <text:p>0,77</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=[.I46]*[.J46]" office:value-type="float" office:value="75.46" calcext:value-type="float"> + <text:p>75,46</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="9"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Pear</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="75" calcext:value-type="float"> + <text:p>75</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float"> + <text:p>0,24</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=[.I47]*[.J47]" office:value-type="float" office:value="18" calcext:value-type="float"> + <text:p>18</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="9"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Banana</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="95" calcext:value-type="float"> + <text:p>95</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.18" calcext:value-type="float"> + <text:p>0,18</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=[.I48]*[.J48]" office:value-type="float" office:value="17.1" calcext:value-type="float"> + <text:p>17,1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="9"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Cherry</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="42" calcext:value-type="float"> + <text:p>42</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0.16" calcext:value-type="float"> + <text:p>0,16</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=[.I49]*[.J49]" office:value-type="float" office:value="6.72" calcext:value-type="float"> + <text:p>6,72</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="9"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("B";[.H51:.H53];[.K51:.K52])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>err:504</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A51])" office:value-type="string" office:string-value="=XLOOKUP("B";H51:H53;K51:K52)" calcext:value-type="string"> + <text:p>=XLOOKUP("B";H51:H53;K51:K52)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>D</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>d</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H51:.H53];[.K51:.K52])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>err:504</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="=XLOOKUP("C";H51:H53;K51:K52)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";H51:H53;K51:K52)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>E</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>e</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("E";[.H51:.I53];[.K51:.L53])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>err:504</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A53])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A53])" office:value-type="string" office:string-value="=XLOOKUP("E";H51:I53;K51:L53)" calcext:value-type="string"> + <text:p>=XLOOKUP("E";H51:I53;K51:L53)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>C</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>F</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>f</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("E";[.H51:.I53];[.K51:.K53])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>err:504</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A54])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A54])" office:value-type="string" office:string-value="=XLOOKUP("E";H51:I53;K51:K53)" calcext:value-type="string"> + <text:p>=XLOOKUP("E";H51:I53;K51:K53)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H51:.I53];[.K51:.K53])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>err:504</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A55])" office:value-type="string" office:string-value="=XLOOKUP("C";H51:I53;K51:K53)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";H51:I53;K51:K53)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;0;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A58]=[.B58]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A58])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <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 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="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a5</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;-1;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A59]=[.B59]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A59])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <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 office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <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="string" calcext:value-type="string"> + <text:p>b2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;1;1)" office:value-type="string" office:string-value="a5" calcext:value-type="string"> + <text:p>a5</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A60]=[.B60]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A60])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <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-cell 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="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;2;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A61]=[.B61]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A61])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="float" office:value="5.2" calcext:value-type="float"> + <text:p>5,2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</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 office:value-type="string" calcext:value-type="string"> + <text:p>D5.2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>d6</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>d2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;0;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A62]=[.B62]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A62])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;-1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</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 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="string" calcext:value-type="string"> + <text:p>e6</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>e2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>e1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;-1;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A63]=[.B63]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A63])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;-1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;1;-1)" office:value-type="string" office:string-value="a5" calcext:value-type="string"> + <text:p>a5</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A64]=[.B64]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A64])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;-1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;2;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A65]=[.B65]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A65])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;-1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$58:.H$62];[.K$58:.K$62];;0;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A66]=[.B66]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A66])" office:value-type="string" office:string-value="=XLOOKUP(3;H$58:H$62;K$58:K$62;;0;2)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;H$58:H$62;K$58:K$62;;0;2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$58:.H$62];[.K$58:.K$62];;-1;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A67]=[.B67]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A67])" office:value-type="string" office:string-value="=XLOOKUP(4;H$58:H$62;K$58:K$62;;-1;2)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;H$58:H$62;K$58:K$62;;-1;2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$58:.H$62];[.K$58:.K$62];;1;2)" office:value-type="string" office:string-value="D5.2" calcext:value-type="string"> + <text:p>D5.2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>D5.2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A68]=[.B68]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A68])" office:value-type="string" office:string-value="=XLOOKUP(4;H$58:H$62;K$58:K$62;;1;2)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;H$58:H$62;K$58:K$62;;1;2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$58:.H$62];[.K$58:.K$62];;2;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A69]=[.B69]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A69])" office:value-type="string" office:string-value="=XLOOKUP(3;H$58:H$62;K$58:K$62;;2;2)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;H$58:H$62;K$58:K$62;;2;2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.J$58:.J$62];[.M$58:.M$62];;0;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A70]=[.B70]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A70])" office:value-type="string" office:string-value="=XLOOKUP(3;J$58:J$62;M$58:M$62;;0;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;J$58:J$62;M$58:M$62;;0;-2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.J$58:.J$62];[.M$58:.M$62];;-1;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A71]=[.B71]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A71])" office:value-type="string" office:string-value="=XLOOKUP(4;J$58:J$62;M$58:M$62;;-1;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;J$58:J$62;M$58:M$62;;-1;-2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.J$58:.J$62];[.M$58:.M$62];;1;-2)" office:value-type="string" office:string-value="b5" calcext:value-type="string"> + <text:p>b5</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A72]=[.B72]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A72])" office:value-type="string" office:string-value="=XLOOKUP(4;J$58:J$62;M$58:M$62;;1;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;J$58:J$62;M$58:M$62;;1;-2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.J$58:.J$62];[.M$58:.M$62];;2;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A73]=[.B73]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A73])" office:value-type="string" office:string-value="=XLOOKUP(3;J$58:J$62;M$58:M$62;;2;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;J$58:J$62;M$58:M$62;;2;-2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$74:.L$74];[.H$75:.L$75];;0;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A74]=[.B74]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A74])" office:value-type="string" office:string-value="=XLOOKUP(3;H$74:L$74;H$75:L$75;;0;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;H$74:L$74;H$75:L$75;;0;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <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="3" calcext:value-type="float"> + <text:p>3</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 office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</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:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$74:.L$74];[.H$75:.L$75];;-1;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A75]=[.B75]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A75])" office:value-type="string" office:string-value="=XLOOKUP(4;H$74:L$74;H$75:L$75;;-1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;H$74:L$74;H$75:L$75;;-1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a5</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>d6</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>e2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$74:.L$74];[.H$75:.L$75];;1;1)" office:value-type="string" office:string-value="a5" calcext:value-type="string"> + <text:p>a5</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A76]=[.B76]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A76])" office:value-type="string" office:string-value="=XLOOKUP(4;H$74:L$74;H$75:L$75;;1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(4;H$74:L$74;H$75:L$75;;1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$74:.L$74];[.H$75:.L$75];;2;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A77]=[.B77]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A77])" office:value-type="string" office:string-value="=XLOOKUP(3;H$74:L$74;H$75:L$75;;2;1)" calcext:value-type="string"> + <text:p>=XLOOKUP(3;H$74:L$74;H$75:L$75;;2;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.I$79:.I$83];[.L$79:.L$83];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A79]=[.B79]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A79])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>E</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>F</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aA</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>fF</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.I$79:.I$83];[.L$79:.L$83];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A80]=[.B80]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A80])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>C</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>E</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bB</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>eE</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.I$79:.I$83];[.L$79:.L$83];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A81]=[.B81]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A81])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>C</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>C</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cA</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("b?b";[.I$84:.I$88];[.L$79:.L$83];;2;1)" office:value-type="string" office:string-value="eB" calcext:value-type="string"> + <text:p>eB</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>eB</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A82]=[.B82]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A82])" office:value-type="string" office:string-value="=XLOOKUP("b?b";I$84:I$88;L$79:L$83;;2;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("b?b";I$84:I$88;L$79:L$83;;2;1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>E</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>F</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>eE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>dF</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bB</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.I$79:.I$83];[.L$79:.L$83];;0;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A83]=[.B83]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A83])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;-1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>F</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>fF</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>eB</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aA</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.I$79:.I$83];[.L$79:.L$83];;-1;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A84]=[.B84]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A84])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;-1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>eEe</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.I$79:.I$83];[.L$79:.L$83];;1;-1)" office:value-type="string" office:string-value="aE" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A85]=[.B85]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A85])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;-1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cCc</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.I$79:.I$83];[.L$79:.L$83];;2;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A86]=[.B86]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A86])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;2;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";I$79:I$83;L$79:L$83;;2;-1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aAa</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H$79:.H$83];[.K$79:.K$83];;0;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A87]=[.B87]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A87])" office:value-type="string" office:string-value="=XLOOKUP("C";H$79:H$83;K$79:K$83;;0;2)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";H$79:H$83;K$79:K$83;;0;2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>fFf</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.H$79:.H$83];[.K$79:.K$83];;-1;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A88]=[.B88]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A88])" office:value-type="string" office:string-value="=XLOOKUP("D";H$79:H$83;K$79:K$83;;-1;2)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";H$79:H$83;K$79:K$83;;-1;2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bBb</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.H$79:.H$83];[.K$79:.K$83];;1;2)" office:value-type="string" office:string-value="eE" calcext:value-type="string"> + <text:p>eE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>eE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A89]=[.B89]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A89])" office:value-type="string" office:string-value="=XLOOKUP("D";H$79:H$83;K$79:K$83;;1;2)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";H$79:H$83;K$79:K$83;;1;2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H$79:.H$83];[.K$79:.K$83];;2;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A90]=[.B90]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A90])" office:value-type="string" office:string-value="=XLOOKUP("C";H$79:H$83;K$79:K$83;;2;2)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";H$79:H$83;K$79:K$83;;2;2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.J$79:.J$83];[.M$79:.M$83];;0;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A91]=[.B91]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A91])" office:value-type="string" office:string-value="=XLOOKUP("C";J$79:J$83;M$79:M$83;;0;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";J$79:J$83;M$79:M$83;;0;-2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.J$79:.J$83];[.M$79:.M$83];;-1;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A92]=[.B92]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A92])" office:value-type="string" office:string-value="=XLOOKUP("D";J$79:J$83;M$79:M$83;;-1;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";J$79:J$83;M$79:M$83;;-1;-2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.J$79:.J$83];[.M$79:.M$83];;1;-2)" office:value-type="string" office:string-value="eE" calcext:value-type="string"> + <text:p>eE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>eE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A93]=[.B93]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A93])" office:value-type="string" office:string-value="=XLOOKUP("D";J$79:J$83;M$79:M$83;;1;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";J$79:J$83;M$79:M$83;;1;-2)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.J$79:.J$83];[.M$79:.M$83];;2;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A94]=[.B94]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A94])" office:value-type="string" office:string-value="=XLOOKUP("C";J$79:J$83;M$79:M$83;;2;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";J$79:J$83;M$79:M$83;;2;-2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H$95:.L$95];[.H$96:.L$96];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A95]=[.B95]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A95])" office:value-type="string" office:string-value="=XLOOKUP("C";H$95:L$95;H$96:L$96;;0;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("C";H$95:L$95;H$96:L$96;;0;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>E</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>C</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>F</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.H$95:.L$95];[.H$96:.L$96];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A96]=[.B96]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A96])" office:value-type="string" office:string-value="=XLOOKUP("D";H$95:L$95;H$96:L$96;;-1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";H$95:L$95;H$96:L$96;;-1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>cA</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>dF</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>eB</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.H$95:.L$95];[.H$96:.L$96];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A97]=[.B97]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A97])" office:value-type="string" office:string-value="=XLOOKUP("D";H$95:L$95;H$96:L$96;;1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("D";H$95:L$95;H$96:L$96;;1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C?";[.H$95:.L$95];[.H$96:.L$96];;2;1)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A98])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A98])" office:value-type="string" office:string-value="=XLOOKUP("C?";H$95:L$95;H$96:L$96;;2;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("C?";H$95:L$95;H$96:L$96;;2;1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>LookCol</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>SearchCol</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>SearchValue</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:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>LookRow</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 office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</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 office:value-type="string" calcext:value-type="string"> + <text:p>w</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>q</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("c";[.I$79:.I$83];[.L$79:.L$83];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A100]=[.B100]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A100])" office:value-type="string" office:string-value="=XLOOKUP("c";I$79:I$83;L$79:L$83;;0;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("c";I$79:I$83;L$79:L$83;;0;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <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 office:value-type="string" calcext:value-type="string"> + <text:p>a</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>SearchhRow</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>d</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>e</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("d";[.I$79:.I$83];[.L$79:.L$83];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>bC</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A101]=[.B101]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A101])" office:value-type="string" office:string-value="=XLOOKUP("d";I$79:I$83;L$79:L$83;;-1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("d";I$79:I$83;L$79:L$83;;-1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <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-cell office:value-type="string" calcext:value-type="string"> + <text:p>b</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("d";[.I$79:.I$83];[.L$79:.L$83];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>aE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A102]=[.B102]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A102])" office:value-type="string" office:string-value="=XLOOKUP("d";I$79:I$83;L$79:L$83;;1;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("d";I$79:I$83;L$79:L$83;;1;1)</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>?</text:p> + </table:table-cell> + <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 office:value-type="string" calcext:value-type="string"> + <text:p>c</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("f?";[.I$79:.I$83];[.L$79:.L$83];;2;1)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A103])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A103])" office:value-type="string" office:string-value="=XLOOKUP("f?";I$79:I$83;L$79:L$83;;2;1)" calcext:value-type="string"> + <text:p>=XLOOKUP("f?";I$79:I$83;L$79:L$83;;2;1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>w</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>d</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K99];[.H$99:.H$109];[.I$99:.I$109];;-1;-1)" office:value-type="string" office:string-value="g" calcext:value-type="string"> + <text:p>g</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>g</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A104]=[.B104]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A104])" office:value-type="string" office:string-value="=XLOOKUP(K99;H$99:H$109;I$99:I$109;;-1;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP(K99;H$99:H$109;I$99:I$109;;-1;-1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>q</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>e</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K99];[.N$99:.R$99];[.N$100:.R$100];;-1;-1)" office:value-type="string" office:string-value="a" calcext:value-type="string"> + <text:p>a</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>a</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A105]=[.B105]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A105])" office:value-type="string" office:string-value="=XLOOKUP(K99;N$99:R$99;N$100:R$100;;-1;-1)" calcext:value-type="string"> + <text:p>=XLOOKUP(K99;N$99:R$99;N$100:R$100;;-1;-1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <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="string" calcext:value-type="string"> + <text:p>f</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.K$1:.K$12];[.I$1:.I$12];0;1;2)" office:value-type="string" office:string-value="BR" calcext:value-type="string"> + <text:p>BR</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>BR</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A106]=[.B106]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A106])" office:value-type="string" office:string-value="=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;1;2)" calcext:value-type="string"> + <text:p>=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;1;2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <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 office:value-type="string" calcext:value-type="string"> + <text:p>g</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.L$1:.L$12];[.I$1:.I$12];0;1;-2)" office:value-type="string" office:string-value="BR" calcext:value-type="string"> + <text:p>BR</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>BR</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A107]=[.B107]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A107])" office:value-type="string" office:string-value="=XLOOKUP($M$1;L$1:L$12;I$1:I$12;0;1;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP($M$1;L$1:L$12;I$1:I$12;0;1;-2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <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 office:value-type="string" calcext:value-type="string"> + <text:p>h</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.K$1:.K$12];[.I$1:.I$12];0;-1;2)" office:value-type="string" office:string-value="ID" calcext:value-type="string"> + <text:p>ID</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>ID</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A108]=[.B108]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A108])" office:value-type="string" office:string-value="=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;-1;2)" calcext:value-type="string"> + <text:p>=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;-1;2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>e</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>I</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.M1];[.L$1:.L$12];[.I$1:.I$12];0;-1;-2)" office:value-type="string" office:string-value="PK" calcext:value-type="string"> + <text:p>PK</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>PK</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A109]=[.B109]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A109])" office:value-type="string" office:string-value="=XLOOKUP(M1;L$1:L$12;I$1:I$12;0;-1;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP(M1;L$1:L$12;I$1:I$12;0;-1;-2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Russia</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>j</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="11"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.N1];[.L$1:.L$12];[.I$1:.I$12];0;0;-2)" office:value-type="string" office:string-value="PK" calcext:value-type="string"> + <text:p>PK</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>PK</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=[.A110]=[.B110]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A110])" office:value-type="string" office:string-value="=XLOOKUP(N1;L$1:L$12;I$1:I$12;0;0;-2)" calcext:value-type="string"> + <text:p>=XLOOKUP(N1;L$1:L$12;I$1:I$12;0;0;-2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.M1];[.K$1:.K$12];[.I$1:.I$12];;0;2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A111])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A111])" office:value-type="string" office:string-value="=XLOOKUP(M1;K$1:K$12;I$1:I$12;;0;2)" calcext:value-type="string"> + <text:p>=XLOOKUP(M1;K$1:K$12;I$1:I$12;;0;2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="90"> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="1048374"> + <table:table-cell table:number-columns-repeated="20"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="20"/> + </table:table-row> + <calcext:conditional-formats> + <calcext:conditional-format calcext:target-range-address="Sheet2.C2:Sheet2.C201"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.C2"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.C2"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.C2"/> + </calcext:conditional-format> + </calcext:conditional-formats> + </table:table> + <table:named-expressions/> + </office:spreadsheet> + </office:body> +</office:document>
\ No newline at end of file diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index e300b4b5ccbb..39ccb3496def 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -2922,6 +2922,7 @@ CPPUNIT_TEST_FIXTURE(Test, testFunctionLists) "SHEETS", "STYLE", "VLOOKUP", + "XLOOKUP", nullptr }; diff --git a/sc/qa/unit/ucalc_sort.cxx b/sc/qa/unit/ucalc_sort.cxx index f2cd7d2d149b..17e244462f7a 100644 --- a/sc/qa/unit/ucalc_sort.cxx +++ b/sc/qa/unit/ucalc_sort.cxx @@ -1972,8 +1972,8 @@ class TestQueryIterator typedef ScQueryCellIteratorBase< ScQueryCellIteratorAccess::Direct, ScQueryCellIteratorType::Generic > Base; public: TestQueryIterator( ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable, - const ScQueryParam& aParam, bool bMod ) - : Base( rDocument, rContext, nTable, aParam, bMod ) + const ScQueryParam& aParam, bool bMod, bool bReverse = false ) + : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) { } using Base::BinarySearch; // make public diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx index e1fafe145d53..a9c123d89768 100644 --- a/sc/source/core/data/funcdesc.cxx +++ b/sc/source/core/data/funcdesc.cxx @@ -675,6 +675,7 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames ) { SC_OPCODE_CELL, ENTRY(SC_OPCODE_CELL_ARY), 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ZELLE, 2, { 0, 1 }, 0 }, { SC_OPCODE_ISPMT, ENTRY(SC_OPCODE_ISPMT_ARY), 0, ID_FUNCTION_GRP_FINANCIAL, HID_FUNC_ISPMT, 4, { 0, 0, 0, 0 }, 0 }, { SC_OPCODE_HYPERLINK, ENTRY(SC_OPCODE_HYPERLINK_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_HYPERLINK, 2, { 0, 1 }, 0 }, + { SC_OPCODE_X_LOOKUP, ENTRY(SC_OPCODE_X_LOOKUP_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_XLOOKUP_MS, 6, { 0, 0, 0, 1, 1, 1 }, 0 }, { SC_OPCODE_GET_PIVOT_DATA, ENTRY(SC_OPCODE_GET_PIVOT_DATA_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_GETPIVOTDATA, VAR_ARGS+2, { 0, 0, 1 }, 0 }, { SC_OPCODE_EUROCONVERT, ENTRY(SC_OPCODE_EUROCONVERT_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_EUROCONVERT, 5, { 0, 0, 0, 1, 1 }, 0 }, { SC_OPCODE_NUMBERVALUE, ENTRY(SC_OPCODE_NUMBERVALUE_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_NUMBERVALUE, 3, { 0, 1, 1 }, 0 }, diff --git a/sc/source/core/data/queryiter.cxx b/sc/source/core/data/queryiter.cxx index 6c5635bd51b6..39b86fe173c0 100644 --- a/sc/source/core/data/queryiter.cxx +++ b/sc/source/core/data/queryiter.cxx @@ -60,16 +60,20 @@ template< ScQueryCellIteratorAccess accessType, ScQueryCellIteratorType queryType > ScQueryCellIteratorBase< accessType, queryType >::ScQueryCellIteratorBase(ScDocument& rDocument, - ScInterpreterContext& rContext, SCTAB nTable, const ScQueryParam& rParam, bool bMod ) - : AccessBase( rDocument, rContext, rParam ) + ScInterpreterContext& rContext, SCTAB nTable, const ScQueryParam& rParam, bool bMod, bool bReverse ) + : AccessBase( rDocument, rContext, rParam, bReverse ) , nStopOnMismatch( nStopOnMismatchDisabled ) , nTestEqualCondition( nTestEqualConditionDisabled ) , bAdvanceQuery( false ) , bIgnoreMismatchOnLeadingStrings( false ) + , bSortedBinarySearch( false ) + , bXLookUp( false ) + , nBestFitCol(SCCOL_MAX) + , nBestFitRow(SCROW_MAX) { nTab = nTable; - nCol = maParam.nCol1; - nRow = maParam.nRow1; + nCol = !bReverse ? maParam.nCol1 : maParam.nCol2; + nRow = !bReverse ? maParam.nRow1 : maParam.nRow2; SCSIZE i; if (!bMod) // Or else it's already inserted return; @@ -127,7 +131,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() bool bNextColumn = maCurPos.first == pCol->maCells.end(); if (!bNextColumn) { - if (nRow > maParam.nRow2) + if ((!mbReverseSearch && nRow > maParam.nRow2) || (mbReverseSearch && nRow < maParam.nRow1)) bNextColumn = true; } @@ -135,9 +139,18 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() { do { - ++nCol; - if (nCol > maParam.nCol2 || nCol >= rDoc.maTabs[nTab]->GetAllocatedColumnsCount()) - return; + if (!mbReverseSearch) + { + ++nCol; + if (nCol > maParam.nCol2 || nCol >= rDoc.maTabs[nTab]->GetAllocatedColumnsCount()) + return; + } + else + { + --nCol; + if (nCol < maParam.nCol1 || nCol < static_cast<SCCOL>(0)) + return; + } if ( bAdvanceQuery ) { AdvanceQueryParamEntryField(); @@ -169,12 +182,12 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() // ValidQuery(). if(HandleItemFound()) return; - IncPos(); + !mbReverseSearch ? IncPos() : DecPos(); continue; } else { - IncBlock(); + !mbReverseSearch ? IncBlock() : DecBlock(); continue; } } @@ -182,7 +195,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() ScRefCellValue aCell = sc::toRefCell(maCurPos.first, maCurPos.second); if (bAllStringIgnore && aCell.hasString()) - IncPos(); + !mbReverseSearch ? IncPos() : DecPos(); else { if ( queryEvaluator.ValidQuery( nRow, @@ -192,9 +205,54 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() nTestEqualCondition |= nTestEqualConditionMatched; if ( aCell.isEmpty()) return; - if( HandleItemFound()) + + // XLookUp: Forward/backward search for best fit value, except if we have an exact match + if (bXLookUp && !bSortedBinarySearch && (rEntry.eOp == SC_LESS_EQUAL || rEntry.eOp == SC_GREATER_EQUAL) && + (nBestFitCol != nCol || nBestFitRow != nRow)) + { + bool bNumSearch = rItem.meType == ScQueryEntry::ByValue && aCell.hasNumeric(); + bool bStringSearch = rItem.meType == ScQueryEntry::ByString && aCell.hasString(); + if (bNumSearch || bStringSearch) + { + if (nTestEqualCondition == nTestEqualConditionFulfilled || (nBestFitCol == SCCOL_MAX && nBestFitRow == SCROW_MAX)) + HandleBestFitItemFound(nCol, nRow); + else + { + ScAddress aBFAddr(nBestFitCol, nBestFitRow, nTab); + ScRefCellValue aBFCell(rDoc, aBFAddr); + ScQueryParam aParamTmp(maParam); + ScQueryEntry& rEntryTmp = aParamTmp.GetEntry(0); + + if (rEntry.eOp == SC_LESS_EQUAL) + rEntryTmp.eOp = SC_GREATER; + else if (rEntry.eOp == SC_GREATER_EQUAL) + rEntryTmp.eOp = SC_LESS; + + ScQueryEntry::Item& rItemTmp = rEntryTmp.GetQueryItem(); + if (bNumSearch) + rItemTmp.mfVal = aBFCell.getValue(); + else if (bStringSearch) + rItemTmp.maString = svl::SharedString(aBFCell.getString(&rDoc)); + + ScQueryEvaluator queryEvaluatorTmp(rDoc, *rDoc.maTabs[nTab], aParamTmp, &mrContext, nullptr); + if (queryEvaluatorTmp.ValidQuery(nRow, (nCol == static_cast<SCCOL>(nFirstQueryField) ? &aCell : nullptr))) + HandleBestFitItemFound(nCol, nRow); + else + { + !mbReverseSearch ? IncPos() : DecPos(); + continue; + } + } + } + else + { + !mbReverseSearch ? IncPos() : DecPos(); + continue; + } + } + if (HandleItemFound()) return; - IncPos(); + !mbReverseSearch ? IncPos() : DecPos(); continue; } else if ( nStopOnMismatch ) @@ -213,7 +271,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() { if (aCell.hasString()) { - IncPos(); + !mbReverseSearch ? IncPos() : DecPos(); bStop = false; } else @@ -228,7 +286,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery() } } else - IncPos(); + !mbReverseSearch ? IncPos() : DecPos(); } bFirstStringIgnore = false; } @@ -279,7 +337,8 @@ void ScQueryCellIteratorBase< accessType, queryType >::InitPos() if( BinarySearch( nCol )) lastRow = nRow; } - AccessBase::InitPosFinish( beforeRow, lastRow ); + bool bFirstMatch = (bXLookUp && op != SC_EQUAL); + AccessBase::InitPosFinish(beforeRow, lastRow, bFirstMatch); } } @@ -292,11 +351,13 @@ void ScQueryCellIteratorBase< accessType, queryType >::AdvanceQueryParamEntryFie ScQueryEntry& rEntry = maParam.GetEntry( j ); if ( rEntry.bDoQuery ) { - if ( rEntry.nField < rDoc.MaxCol() ) + if (!mbReverseSearch && rEntry.nField < rDoc.MaxCol()) rEntry.nField++; + else if (mbReverseSearch && rEntry.nField > static_cast<SCCOLROW>(0)) + rEntry.nField--; else { - assert(!"AdvanceQueryParamEntryField: ++rEntry.nField > MAXCOL"); + assert(!"AdvanceQueryParamEntryField: ++rEntry.nField > MAXCOL || --rEntry.nField < 0"); } } else @@ -670,14 +731,25 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo nFoundCol = rDoc.MaxCol()+1; nFoundRow = rDoc.MaxRow()+1; - SetStopOnMismatch( true ); // assume sorted keys + + if (bXLookUp && !bSortedBinarySearch) + SetStopOnMismatch( false ); // assume not sorted keys for XLookup + else + SetStopOnMismatch( true ); // assume sorted keys + SetTestEqualCondition( true ); bIgnoreMismatchOnLeadingStrings = true; + bool bLiteral = maParam.eSearchType == utl::SearchParam::SearchType::Normal && maParam.GetEntry(0).GetQueryItem().meType == ScQueryEntry::ByString; bool bBinary = maParam.bByRow && (bLiteral || maParam.GetEntry(0).GetQueryItem().meType == ScQueryEntry::ByValue) && (maParam.GetEntry(0).eOp == SC_LESS_EQUAL || maParam.GetEntry(0).eOp == SC_GREATER_EQUAL); + + // assume not sorted properly if we are using XLookup with forward or backward search + if (bBinary && bXLookUp && !bSortedBinarySearch) + bBinary = false; + bool bFound = false; if (bBinary) { @@ -768,9 +840,10 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo } } } - if ( IsEqualConditionFulfilled() ) + if ( IsEqualConditionFulfilled() && !bXLookUp ) { - // Position on last equal entry. + // Position on last equal entry, except for XLOOKUP, + // which looking for the first equal entry SCSIZE nEntries = maParam.GetEntryCount(); for ( SCSIZE j = 0; j < nEntries; j++ ) { @@ -861,19 +934,27 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct > ::ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, - ScInterpreterContext& rContext, const ScQueryParam& rParam ) + ScInterpreterContext& rContext, const ScQueryParam& rParam, bool bReverseSearch ) : maParam( rParam ) , rDoc( rDocument ) , mrContext( rContext ) + , mbReverseSearch( bReverseSearch ) { // coverity[uninit_member] - this just contains data, subclass will initialize some of it } void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::InitPos() { - nRow = maParam.nRow1; - if (maParam.bHasHeader && maParam.bByRow) - ++nRow; + if (!mbReverseSearch) + { + nRow = maParam.nRow1; + if (maParam.bHasHeader && maParam.bByRow) + ++nRow; + } + else + { + nRow = maParam.nRow2; + } const ScColumn& rCol = rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol); maCurPos = rCol.maCells.position(nRow); } @@ -891,6 +972,19 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::Inc IncBlock(); } +void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::DecPos() +{ + if (maCurPos.second > 0) + { + // Move within the same block. + --maCurPos.second; + --nRow; + } + else + // Move to the prev block. + DecBlock(); +} + void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::IncBlock() { ++maCurPos.first; @@ -899,6 +993,26 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::Inc nRow = maCurPos.first->position; } +void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::DecBlock() +{ + // Set current position to the last possible row. + const ScColumn& rCol = rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol); + if (maCurPos.first != rCol.maCells.begin()) + { + --maCurPos.first; + maCurPos.second = maCurPos.first->size - 1; + + nRow = maCurPos.first->position + maCurPos.second; + } + else + { + // No rows, set to end. This will make PerformQuery() go to next column. + nRow = maParam.nRow1 - 1; + maCurPos.first = rCol.maCells.end(); + maCurPos.second = 0; + } +} + /** * This class sequentially indexes non-empty cells in order, from the top of * the block where the start row position is, to the bottom of the block @@ -1073,10 +1187,11 @@ ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::MakeBina ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache > ::ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, - ScInterpreterContext& rContext, const ScQueryParam& rParam ) + ScInterpreterContext& rContext, const ScQueryParam& rParam, bool bReverseSearch ) : maParam( rParam ) , rDoc( rDocument ) , mrContext( rContext ) + , mbReverseSearch( bReverseSearch ) { // coverity[uninit_member] - this just contains data, subclass will initialize some of it } @@ -1101,7 +1216,7 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache > } void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >::InitPosFinish( - SCROW beforeRow, SCROW lastRow ) + SCROW beforeRow, SCROW lastRow, bool bFirstMatch ) { pColumn = &rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol); if(lastRow >= 0) @@ -1110,7 +1225,10 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache > sortedCachePosLast = sortedCache->indexForRow(lastRow); if(sortedCachePos <= sortedCachePosLast) { - nRow = sortedCache->rowForIndex(sortedCachePos); + if (!bFirstMatch) + nRow = sortedCache->rowForIndex(sortedCachePos); + else + nRow = sortedCache->rowForIndex(sortedCachePosLast); maCurPos = pColumn->maCells.position(nRow); return; } @@ -1322,7 +1440,10 @@ template< ScQueryCellIteratorAccess accessType > bool ScQueryCellIterator< accessType >::GetFirst() { assert(nTab < rDoc.GetTableCount() && "index out of bounds, FIX IT"); - nCol = maParam.nCol1; + if (!mbReverseSearch) + nCol = maParam.nCol1; + else + nCol = maParam.nCol2; InitPos(); return GetThis(); } @@ -1330,7 +1451,10 @@ bool ScQueryCellIterator< accessType >::GetFirst() template< ScQueryCellIteratorAccess accessType > bool ScQueryCellIterator< accessType >::GetNext() { - IncPos(); + if (!mbReverseSearch) + IncPos(); + else + DecPos(); if ( nStopOnMismatch ) nStopOnMismatch = nStopOnMismatchEnabled; if ( nTestEqualCondition ) diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx index 64b9a8ae5b2c..e577a5e2bf8a 100644 --- a/sc/source/core/inc/interpre.hxx +++ b/sc/source/core/inc/interpre.hxx @@ -30,6 +30,7 @@ #include <token.hxx> #include <math.hxx> #include <kahan.hxx> +#include <queryiter.hxx> #include "parclass.hxx" #include <map> @@ -55,6 +56,57 @@ struct ScInterpreterContext; class ScJumpMatrix; struct ScRefCellValue; +enum MatchMode{ exactorNA=0, exactorS=-1, exactorG=1, wildcard=2 }; +enum SearchMode{ searchfwd=1, searchrev=-1, searchbasc=2, searchbdesc=-2 }; + +struct VectorSearchArguments +{ + // struct contains the contents of the function arguments + // Struct owner, ScMatch or ScXLookup + bool isXLookup = false; + + // match mode (common, enum values are from XLOOKUP) + // optional 5th argument to set match mode + // 0 - Exact match. If none found, return #N/A. (MATCH value 0) + // -1 - Exact match. If none found, return the next smaller item. (MATCH value 1) + // 1 - Exact match. If none found, return the next larger item. (MATCH value -1) + // 2 - A wildcard match where *, ?, and ~ have special meaning. (XLOOKUP only) + // TODO : is this enum needed, or do we solely use rEntry.eOp ? + MatchMode eMatchMode = exactorG; + + // value to be searched for (common) + SCCOL nCol1 = 0; + SCROW nRow1 = 0; + SCTAB nTab1 = 0; + SCCOL nCol2 = 0; + SCROW nRow2 = 0; + SCTAB nTab2 = 0; + ScMatrixRef pMatSrc; + bool isStringSearch = true; + double fSearchVal; + svl::SharedString sSearchStr; + bool bVLookup; + + // search mode (only XLOOKUP has all 4 options, MATCH only uses searchfwd) + // optional 6th argument to set search mode + // 1 - Perform a search starting at the first item. This is the default. + // -1 - Perform a reverse search starting at the last item. + // 2 - Perform a binary search that relies on lookup_array being sorted in ascending order. + // If not sorted, invalid results will be returned. + // -2 - Perform a binary search that relies on lookup_array being sorted in descending order. + // If not sorted, invalid results will be returned. + // + SearchMode eSearchMode = searchfwd; + + // search variables + SCSIZE nHitIndex = 0; + SCSIZE nBestFit = SCSIZE_MAX; + + // result + int nIndex = -1; + bool isResultNA = false; +}; + namespace sc { struct CompareOptions; @@ -234,6 +286,10 @@ private: bool IsTableOpInRange( const ScRange& ); sal_uInt32 GetCellNumberFormat( const ScAddress& rPos, ScRefCellValue& rCell ); double ConvertStringToValue( const OUString& ); + bool SearchVectorForValue( VectorSearchArguments& ); + bool SearchMatrixForValue( VectorSearchArguments&, ScQueryParam&, ScQueryEntry&, ScQueryEntry::Item& ); + bool SearchRangeForValue( VectorSearchArguments&, ScQueryParam&, ScQueryEntry& ); + public: static double ScGetGCD(double fx, double fy); /** For matrix back calls into the current interpreter. @@ -485,8 +541,8 @@ private: // Set error according to rVal, and set rVal to 0.0 if there was an error. inline void TreatDoubleError( double& rVal ); // Lookup using ScLookupCache, @returns true if found and result address - bool LookupQueryWithCache( ScAddress & o_rResultPos, - const ScQueryParam & rParam, const ScComplexRefData* refData ) const; + bool LookupQueryWithCache( ScAddress & o_rResultPos, const ScQueryParam & rParam, + const ScComplexRefData* refData, sal_Int8 nSearchMode, bool bXlookupMode ) const; void ScIfJump(); void ScIfError( bool bNAonly ); @@ -628,6 +684,7 @@ private: void ScLookup(); void ScHLookup(); void ScVLookup(); + void ScXLookup(); void ScSubTotal(); // If upon call rMissingField==true then the database field parameter may be diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index 13036fe1d55d..6b82844f95ce 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -62,7 +62,6 @@ #include <doubleref.hxx> #include <queryparam.hxx> #include <queryentry.hxx> -#include <queryiter.hxx> #include <tokenarray.hxx> #include <compare.hxx> #include <comphelper/lok.hxx> @@ -4777,7 +4776,7 @@ private: they are equal, and 1 when the matrix value is larger than the query value. */ sal_Int32 lcl_CompareMatrix2Query( - SCSIZE i, const VectorMatrixAccessor& rMat, const ScQueryEntry& rEntry) + SCSIZE i, const VectorMatrixAccessor& rMat, const ScQueryParam& rParam, const ScQueryEntry& rEntry, bool bMatchWholeCell ) { if (rMat.IsEmpty(i)) { @@ -4818,7 +4817,61 @@ sal_Int32 lcl_CompareMatrix2Query( OUString aStr1 = rMat.GetString(i); OUString aStr2 = rEntry.GetQueryItem().maString.getString(); - return ScGlobal::GetCollator().compareString(aStr1, aStr2); // case-insensitive + // bRealWildOrRegExp + if (rParam.eSearchType != utl::SearchParam::SearchType::Normal && + ((rEntry.eOp == SC_EQUAL) || (rEntry.eOp == SC_NOT_EQUAL))) + { + sal_Int32 nStart = 0; + sal_Int32 nEnd = aStr1.getLength(); + + bool bMatch = rEntry.GetSearchTextPtr(rParam.eSearchType, rParam.bCaseSens, bMatchWholeCell) + ->SearchForward(aStr1, &nStart, &nEnd); + // from 614 on, nEnd is behind the found text + if (bMatch && bMatchWholeCell + && (nStart != 0 || nEnd != aStr1.getLength())) + bMatch = false; // RegExp must match entire cell string + + bool bOk = ((rEntry.eOp == SC_NOT_EQUAL) ? !bMatch : bMatch); + + if (bOk) + return 0; // we have a WildOrRegExp match + } + + CollatorWrapper& rCollator = ScGlobal::GetCollator(rParam.bCaseSens); + return rCollator.compareString(aStr1, aStr2); +} + +/** returns -1 when matrix(i) value is smaller than matrix(j) value, 0 when + they are equal, and 1 when larger */ +sal_Int32 lcl_Compare2MatrixCells( SCSIZE i, const VectorMatrixAccessor& rMat, SCSIZE j ) +{ + // empty always less than anything else + if (rMat.IsEmpty(i)) + return ( rMat.IsEmpty(j) ? 0 : -1 ); + else if (rMat.IsEmpty(j)) + return 1; + + bool bByString = rMat.IsStringOrEmpty(j); // string, empty has already been handled + if (rMat.IsValue(i)) + { + const double nVal1 = rMat.GetDouble(i); + if (!std::isfinite(nVal1)) + return 1; // error always greater than numeric or string + + if (bByString) + return -1; // numeric always less than string + + const double nVal2 = rMat.GetDouble(j); + if (nVal1 == nVal2) + return 0; + + return ( nVal1 < nVal2 ? -1 : 1 ); + } + + if (!bByString) + return 1; // string always greater than numeric + + return ScGlobal::GetCollator().compareString(rMat.GetString(i), rMat.GetString(j)); // case-insensitive } /** returns the last item with the identical value as the original item @@ -4861,35 +4914,50 @@ void lcl_GetLastMatch( SCSIZE& rIndex, const VectorMatrixAccessor& rMat, void ScInterpreter::ScMatch() { - sal_uInt8 nParamCount = GetByte(); if ( !MustHaveParamCount( nParamCount, 2, 3 ) ) return; - double fTyp; - if (nParamCount == 3) - fTyp = GetDouble(); - else - fTyp = 1.0; - SCCOL nCol1 = 0; - SCROW nRow1 = 0; - SCTAB nTab1 = 0; - SCCOL nCol2 = 0; - SCROW nRow2 = 0; - ScMatrixRef pMatSrc = nullptr; + VectorSearchArguments vsa; + vsa.isXLookup = false; + // get match mode + double fType = ( nParamCount == 3 ? GetDouble() : 1.0 ); + switch ( static_cast<int>(fType) ) + { + case -1 : + vsa.eMatchMode = exactorG; + vsa.eSearchMode = searchbdesc; + break; + case 0 : + vsa.eMatchMode = exactorNA; + vsa.eSearchMode = searchfwd; + break; + case 1 : + // default value + vsa.eMatchMode = exactorS; + vsa.eSearchMode = searchbasc; + break; + default : + PushIllegalParameter(); + return; + } + + // get vector to be searched switch (GetStackType()) { case svSingleRef: - PopSingleRef( nCol1, nRow1, nTab1); - nCol2 = nCol1; - nRow2 = nRow1; + PopSingleRef( vsa.nCol1, vsa.nRow1, vsa.nTab1); + vsa.nCol2 = vsa.nCol1; + vsa.nRow2 = vsa.nRow1; + vsa.pMatSrc = nullptr; break; case svDoubleRef: { + vsa.pMatSrc = nullptr; SCTAB nTab2 = 0; - PopDoubleRef(nCol1, nRow1, nTab1, nCol2, nRow2, nTab2); - if (nTab1 != nTab2 || (nCol1 != nCol2 && nRow1 != nRow2)) + PopDoubleRef(vsa.nCol1, vsa.nRow1, vsa.nTab1, vsa.nCol2, vsa.nRow2, nTab2); + if (vsa.nTab1 != nTab2 || (vsa.nCol1 != vsa.nCol2 && vsa.nRow1 != vsa.nRow2)) { PushIllegalParameter(); return; @@ -4900,11 +4968,11 @@ void ScInterpreter::ScMatch() case svExternalDoubleRef: { if (GetStackType() == svMatrix) - pMatSrc = PopMatrix(); + vsa.pMatSrc = PopMatrix(); else - PopExternalDoubleRef(pMatSrc); + PopExternalDoubleRef(vsa.pMatSrc); - if (!pMatSrc) + if (!vsa.pMatSrc) { PushIllegalParameter(); return; @@ -4916,41 +4984,24 @@ void ScInterpreter::ScMatch() return; } + // get search value if (nGlobalError == FormulaError::NONE) { - double fVal; - ScQueryParam rParam; - rParam.nCol1 = nCol1; - rParam.nRow1 = nRow1; - rParam.nCol2 = nCol2; - rParam.nTab = nTab1; - const ScComplexRefData* refData = nullptr; - - ScQueryEntry& rEntry = rParam.GetEntry(0); - ScQueryEntry::Item& rItem = rEntry.GetQueryItem(); - rEntry.bDoQuery = true; - if (fTyp < 0.0) - rEntry.eOp = SC_GREATER_EQUAL; - else if (fTyp > 0.0) - rEntry.eOp = SC_LESS_EQUAL; switch ( GetStackType() ) { case svDouble: { - fVal = GetDouble(); - rItem.mfVal = fVal; - rItem.meType = ScQueryEntry::ByValue; + vsa.isStringSearch = false; + vsa.fSearchVal = GetDouble(); } break; case svString: { - rItem.meType = ScQueryEntry::ByString; - rItem.maString = GetString(); + vsa.isStringSearch = true; + vsa.sSearchStr = GetString(); } break; case svDoubleRef : - refData = GetStackDoubleRef(); - [[fallthrough]]; case svSingleRef : { ScAddress aAdr; @@ -4962,14 +5013,13 @@ void ScInterpreter::ScMatch() ScRefCellValue aCell(mrDoc, aAdr); if (aCell.hasNumeric()) { - fVal = GetCellValue(aAdr, aCell); - rItem.meType = ScQueryEntry::ByValue; - rItem.mfVal = fVal; + vsa.isStringSearch = false; + vsa.fSearchVal = GetCellValue(aAdr, aCell); } else { - GetCellString(rItem.maString, aCell); - rItem.meType = ScQueryEntry::ByString; + vsa.isStringSearch = true; + GetCellString(vsa.sSearchStr, aCell); } } break; @@ -4984,25 +5034,22 @@ void ScInterpreter::ScMatch() } if (pToken->GetType() == svDouble) { - rItem.meType = ScQueryEntry::ByValue; - rItem.mfVal = pToken->GetDouble(); + vsa.isStringSearch = false; + vsa.fSearchVal = pToken->GetDouble(); } else { - rItem.meType = ScQueryEntry::ByString; - rItem.maString = pToken->GetString(); + vsa.isStringSearch = true; + vsa.sSearchStr = pToken->GetString(); } } break; case svExternalDoubleRef: case svMatrix : { - svl::SharedString aStr; ScMatValType nType = GetDoubleOrStringFromMatrix( - rItem.mfVal, aStr); - rItem.maString = aStr; - rItem.meType = ScMatrix::IsNonValueType(nType) ? - ScQueryEntry::ByString : ScQueryEntry::ByValue; + vsa.fSearchVal, vsa.sSearchStr); + vsa.isStringSearch = ScMatrix::IsNonValueType(nType); } break; default: @@ -5011,163 +5058,17 @@ void ScInterpreter::ScMatch() return; } } - if (rItem.meType == ScQueryEntry::ByString) - { - bool bIsVBAMode = mrDoc.IsInVBAMode(); - if ( bIsVBAMode ) - rParam.eSearchType = utl::SearchParam::SearchType::Wildcard; - else - rParam.eSearchType = DetectSearchType(rEntry.GetQueryItem().maString.getString(), mrDoc); - } - - if (pMatSrc) // The source data is matrix array. + // execute search + if ( SearchVectorForValue( vsa ) ) + PushDouble( vsa.nIndex ); + else { - SCSIZE nC, nR; - pMatSrc->GetDimensions( nC, nR); - if (nC > 1 && nR > 1) - { - // The source matrix must be a vector. - PushIllegalParameter(); - return; - } - - // Do not propagate errors from matrix while searching. - pMatSrc->SetErrorInterpreter( nullptr); - - SCSIZE nMatCount = (nC == 1) ? nR : nC; - VectorMatrixAccessor aMatAcc(*pMatSrc, nC == 1); - - // simple serial search for equality mode (source data doesn't - // need to be sorted). - - if (rEntry.eOp == SC_EQUAL) - { - for (SCSIZE i = 0; i < nMatCount; ++i) - { - if (lcl_CompareMatrix2Query( i, aMatAcc, rEntry) == 0) - { - PushDouble(i+1); // found ! - return; - } - } - PushNA(); // not found - return; - } - - // binary search for non-equality mode (the source data is - // assumed to be sorted). - - bool bAscOrder = (rEntry.eOp == SC_LESS_EQUAL); - SCSIZE nFirst = 0, nLast = nMatCount-1, nHitIndex = 0; - for (SCSIZE nLen = nLast-nFirst; nLen > 0; nLen = nLast-nFirst) - { - SCSIZE nMid = nFirst + nLen/2; - sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc, rEntry); - if (nCmp == 0) - { - // exact match. find the last item with the same value. - lcl_GetLastMatch( nMid, aMatAcc, nMatCount); - PushDouble( nMid+1); - return; - } - - if (nLen == 1) // first and last items are next to each other. - { - if (nCmp < 0) - nHitIndex = bAscOrder ? nLast : nFirst; - else - nHitIndex = bAscOrder ? nFirst : nLast; - break; - } - - if (nCmp < 0) - { - if (bAscOrder) - nFirst = nMid; - else - nLast = nMid; - } - else - { - if (bAscOrder) - nLast = nMid; - else - nFirst = nMid; - } - } - - if (nHitIndex == nMatCount-1) // last item - { - sal_Int32 nCmp = lcl_CompareMatrix2Query( nHitIndex, aMatAcc, rEntry); - if ((bAscOrder && nCmp <= 0) || (!bAscOrder && nCmp >= 0)) - { - // either the last item is an exact match or the real - // hit is beyond the last item. - PushDouble( nHitIndex+1); - return; - } - } - - if (nHitIndex > 0) // valid hit must be 2nd item or higher - { - if ( ! ( rItem.meType == ScQueryEntry::ByString && aMatAcc.IsValue( nHitIndex-1 ) ) && - ! ( rItem.meType == ScQueryEntry::ByValue && !aMatAcc.IsValue( nHitIndex-1 ) ) ) - PushDouble( nHitIndex); // non-exact match - else - PushNA(); - return; - } - - PushNA(); - return; - } - - // The source data is cell range. - SCCOLROW nDelta = 0; - if (nCol1 == nCol2) - { // search row in column - rParam.nRow2 = nRow2; - rEntry.nField = nCol1; - ScAddress aResultPos( nCol1, nRow1, nTab1); - if (!LookupQueryWithCache( aResultPos, rParam, refData)) - { + if ( vsa.isResultNA ) PushNA(); - return; - } - nDelta = aResultPos.Row() - nRow1; - } - else - { // search column in row - SCCOL nC; - rParam.bByRow = false; - rParam.nRow2 = nRow1; - rEntry.nField = nCol1; - ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false); - // Advance Entry.nField in Iterator if column changed - aCellIter.SetAdvanceQueryParamEntryField( true ); - if (fTyp == 0.0) - { // EQUAL - if ( aCellIter.GetFirst() ) - nC = aCellIter.GetCol(); - else - { - PushNA(); - return; - } - } else - { // <= or >= - SCROW nR; - if ( !aCellIter.FindEqualOrSortedLastInRange( nC, nR ) ) - { - PushNA(); - return; - } - } - nDelta = nC - nCol1; + return; // error occurred and has already been pushed } - PushDouble(static_cast<double>(nDelta + 1)); } else PushIllegalParameter(); @@ -5627,7 +5528,7 @@ void ScInterpreter::IterateParametersIf( ScIterFuncIf eFunc ) } else { - ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false); + ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false); // Increment Entry.nField in iterator when switching to next column. aCellIter.SetAdvanceQueryParamEntryField( true ); if ( aCellIter.GetFirst() ) @@ -5886,12 +5787,12 @@ void ScInterpreter::ScCountIf() if(ScCountIfCellIteratorSortedCache::CanBeUsed(mrDoc, rParam, nTab1, pMyFormulaCell, refData, mrContext)) { - ScCountIfCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false); + ScCountIfCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false, false); fCount += aCellIter.GetCount(); } else { - ScCountIfCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false); + ScCountIfCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false); fCount += aCellIter.GetCount(); } } @@ -6289,7 +6190,7 @@ void ScInterpreter::IterateParametersIfs( double(*ResultFunc)( const sc::ParamIf if( ScQueryCellIteratorSortedCache::CanBeUsed( mrDoc, rParam, nTab1, pMyFormulaCell, refData, mrContext )) { - ScQueryCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false); + ScQueryCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false, false); // Increment Entry.nField in iterator when switching to next column. aCellIter.SetAdvanceQueryParamEntryField( true ); if ( aCellIter.GetFirst() ) @@ -6304,7 +6205,7 @@ void ScInterpreter::IterateParametersIfs( double(*ResultFunc)( const sc::ParamIf } else { - ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false); + ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false); // Increment Entry.nField in iterator when switching to next column. aCellIter.SetAdvanceQueryParamEntryField( true ); if ( aCellIter.GetFirst() ) @@ -7061,12 +6962,13 @@ void ScInterpreter::ScLookup() // assumed to be sorted in ascending order). SCCOLROW nDelta = -1; + bool bMatchWholeCell = mrDoc.GetDocOptions().IsMatchWholeCell(); SCSIZE nFirst = 0, nLast = nLenMajor-1; //, nHitIndex = 0; for (SCSIZE nLen = nLast-nFirst; nLen > 0; nLen = nLast-nFirst) { SCSIZE nMid = nFirst + nLen/2; - sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc2, rEntry); + sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc2, aParam, rEntry, bMatchWholeCell ); if (nCmp == 0) { // exact match. find the last item with the same value. @@ -7092,7 +6994,7 @@ void ScInterpreter::ScLookup() if (nDelta == static_cast<SCCOLROW>(nLenMajor-2)) // last item { - sal_Int32 nCmp = lcl_CompareMatrix2Query(nDelta+1, aMatAcc2, rEntry); + sal_Int32 nCmp = lcl_CompareMatrix2Query(nDelta+1, aMatAcc2, aParam, rEntry, bMatchWholeCell ); if (nCmp <= 0) { // either the last item is an exact match or the real @@ -7254,7 +7156,7 @@ void ScInterpreter::ScLookup() if (rItem.meType == ScQueryEntry::ByString) aParam.eSearchType = DetectSearchType(rItem.maString.getString(), mrDoc); - ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false); + ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false, false); SCCOL nC; SCROW nR; // Advance Entry.nField in iterator upon switching columns if @@ -7490,8 +7392,13 @@ void ScInterpreter::CalculateLookup(bool bHLookup) return; ScQueryEntry::Item& rItem = rEntry.GetQueryItem(); + svl::SharedString aParamStr; if (rItem.meType == ScQueryEntry::ByString) + { aParam.eSearchType = DetectSearchType(rItem.maString.getString(), mrDoc); + aParamStr = rItem.maString; + } + if (pMat) { SCSIZE nMatCount = bHLookup ? nC : nR; @@ -7501,7 +7408,6 @@ void ScInterpreter::CalculateLookup(bool bHLookup) //!!!!!!! //TODO: enable regex on matrix strings //!!!!!!! - svl::SharedString aParamStr = rItem.maString; if ( bSorted ) { CollatorWrapper& rCollator = ScGlobal::GetCollator(); @@ -7611,6 +7517,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup) } else { + // not a matrix rEntry.nField = nCol1; bool bFound = false; SCCOL nCol = 0; @@ -7619,7 +7526,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup) rEntry.eOp = SC_LESS_EQUAL; if ( bHLookup ) { - ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false); + ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false, false); // advance Entry.nField in Iterator upon switching columns aCellIter.SetAdvanceQueryParamEntryField( true ); if ( bSorted ) @@ -7637,7 +7544,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup) else { ScAddress aResultPos( nCol1, nRow1, nTab1); - bFound = LookupQueryWithCache( aResultPos, aParam, refData); + bFound = LookupQueryWithCache( aResultPos, aParam, refData, 0, false ); nRow = aResultPos.Row(); nCol = nSpIndex; } @@ -7716,6 +7623,300 @@ void ScInterpreter::ScVLookup() CalculateLookup(false); } +void ScInterpreter::ScXLookup() +{ +/* TODO + -use VectorSearchArguments and SearchVectorForValue() with ScLookup, ScHLookup and ScVLookup + as well to reduce redundant code, can de done later with lots of other MATCH/LOOKUP related code + that can be unified + -BinarySearch not supported for columns (horizontal search), now just use linear mode in this case + -improve efficiency of code +*/ + sal_uInt8 nParamCount = GetByte(); + if ( !MustHaveParamCount( nParamCount, 3, 6 ) ) + return; + + VectorSearchArguments vsa; + vsa.isXLookup = true; + + if ( nParamCount == 6 ) + { + sal_Int16 k = GetInt16(); + if ( k >= -2 && k <= 2 && k != 0 ) + vsa.eSearchMode = static_cast<SearchMode>(k); + else + { + PushIllegalParameter(); + return; + } + } + else + vsa.eSearchMode = searchfwd; + + if ( nParamCount >= 5 ) + { + sal_Int16 k = GetInt16(); + if ( k >= -1 && k <= 2 ) + vsa.eMatchMode = static_cast<MatchMode>(k); + else + { + PushIllegalParameter(); + return; + } + } + else + vsa.eMatchMode = exactorNA; + + // Optional 4th argument to set return values if not found (default is #N/A) + formula::FormulaConstTokenRef xNotFound; + if ( nParamCount >= 4 && GetStackType() != svEmptyCell ) + xNotFound = PopToken(); + + // 3rd argument is return value array + ScMatrixRef prMat = nullptr; + SCSIZE nrC = 0, nrR = 0; + StackVar eType = GetStackType(); + switch ( eType ) + { + case svDoubleRef : + case svSingleRef : + case svExternalDoubleRef : + case svExternalSingleRef : + case svMatrix : + prMat = GetMatrix(); + if ( prMat ) + prMat->GetDimensions( nrC, nrR ); + else + { + PushIllegalParameter(); + return; + } + break; + + default : + PushIllegalParameter(); + return; + } + + // 2nd argument is vector to be searched + SCSIZE nsC = 0, nsR = 0; + switch ( GetStackType() ) + { + case svSingleRef: + vsa.pMatSrc = nullptr; + PopSingleRef( vsa.nCol1, vsa.nRow1, vsa.nTab1); + vsa.nCol2 = vsa.nCol1; + vsa.nRow2 = vsa.nRow1; + nsC = vsa.nCol2 - vsa.nCol1 + 1; + nsR = vsa.nRow2 - vsa.nRow1 + 1; + break; + case svDoubleRef: + { + vsa.pMatSrc = nullptr; + SCTAB nTab2 = 0; + PopDoubleRef(vsa.nCol1, vsa.nRow1, vsa.nTab1, vsa.nCol2, vsa.nRow2, nTab2); + if (vsa.nTab1 != nTab2 || (vsa.nCol1 != vsa.nCol2 && vsa.nRow1 != vsa.nRow2)) + { + PushIllegalParameter(); + return; + } + nsC = vsa.nCol2 - vsa.nCol1 + 1; + nsR = vsa.nRow2 - vsa.nRow1 + 1; + } + break; + case svMatrix: + case svExternalDoubleRef: + { + if (GetStackType() == svMatrix) + vsa.pMatSrc = PopMatrix(); + else + PopExternalDoubleRef(vsa.pMatSrc); + + if (!vsa.pMatSrc) + { + PushIllegalParameter(); + return; + } + vsa.pMatSrc->GetDimensions( nsC, nsR); + } + break; + + default: + PushIllegalParameter(); + return; + } + if ( ( nsR >= nsC && nsR != nrR ) || ( nsR < nsC && nsC != nrC ) ) + { + // search matrix must have same number of elements as result matrix in search direction + PushIllegalParameter(); + return; + } + + // 1st argument is search value + if (nGlobalError == FormulaError::NONE) + { + switch ( GetStackType() ) + { + case svDouble: + { + vsa.isStringSearch = false; + vsa.fSearchVal = GetDouble(); + } + break; + + case svString: + { + vsa.isStringSearch = true; + vsa.sSearchStr = GetString(); + } + break; + + case svDoubleRef : + case svSingleRef : + { + ScAddress aAdr; + if ( !PopDoubleRefOrSingleRef( aAdr ) ) + { + PushInt(0); + return ; + } + ScRefCellValue aCell(mrDoc, aAdr); + if (aCell.hasNumeric()) + { + vsa.isStringSearch = false; + vsa.fSearchVal = GetCellValue(aAdr, aCell); + } + else + { + vsa.isStringSearch = true; + GetCellString(vsa.sSearchStr, aCell); + } + } + break; + + case svExternalSingleRef: + { + ScExternalRefCache::TokenRef pToken; + PopExternalSingleRef(pToken); + if (nGlobalError != FormulaError::NONE) + { + PushError( nGlobalError); + return; + } + if (pToken->GetType() == svDouble) + { + vsa.isStringSearch = false; + vsa.fSearchVal = pToken->GetDouble(); + } + else + { + vsa.isStringSearch = false; + vsa.sSearchStr = pToken->GetString(); + } + } + break; + + case svExternalDoubleRef: + case svMatrix : + { + ScMatValType nType = GetDoubleOrStringFromMatrix( + vsa.fSearchVal, vsa.sSearchStr); + vsa.isStringSearch = ScMatrix::IsNonValueType(nType); + } + break; + + default: + { + PushIllegalParameter(); + return; + } + } + } + + // start search + if ( SearchVectorForValue( vsa ) ) + { + // found, output result + assert( vsa.bVLookup ? ( o3tl::make_unsigned(vsa.nIndex) < nrR ) : + ( o3tl::make_unsigned(vsa.nIndex) < nrC ) ); + SCSIZE nX; + SCSIZE nY; + SCSIZE nResCols; + SCSIZE nResRows; + if ( vsa.bVLookup ) + { + nX = static_cast<SCSIZE>(0); + nY = vsa.nIndex; + nResCols = nrC; + nResRows = 1; + } + else + { + nX = vsa.nIndex; + nY = static_cast<SCSIZE>(0); + nResCols = 1; + nResRows = nrR; + } + // if result matrix has more than one row or column push matrix else push single value + if ( nResCols > 1 || nResRows > 1 ) + { + // result is matrix, make/fill matrix with output and push that + ScMatrixRef pResMat = GetNewMat( nResCols, nResRows, /*bEmpty*/true ); + if ( pResMat ) + { + for ( SCSIZE i = 0; i < nResCols; i++ ) + { + for ( SCSIZE j = 0; j < nResRows; j++ ) + { + SCSIZE ri; + SCSIZE rj; + if ( vsa.bVLookup ) + { + ri = nX + i; + rj = nY; + } + else + { + ri = nX; + rj = nY + j; + } + if ( prMat->IsStringOrEmpty( ri, rj ) ) + pResMat->PutString( prMat->GetString( ri, rj ), i, j ); + else + pResMat->PutDouble( prMat->GetDouble( ri, rj ), i, j ); + } + } + PushMatrix( pResMat ); + } + else + { + PushIllegalParameter(); + return; + } + } + else + { + // result is a single value + if ( prMat->IsStringOrEmpty( nX, nY) ) + PushString( prMat->GetString( nX, nY ).getString() ); + else + PushDouble( prMat->GetDouble( nX, nY ) ); + } + } + else + { + if ( vsa.isResultNA ) + { + if ( xNotFound && ( xNotFound->GetType() != svMissing ) ) + PushTokenRef(xNotFound); + else + PushNA(); + } + } + + return; +} + void ScInterpreter::ScSubTotal() { sal_uInt8 nParamCount = GetByte(); @@ -8093,7 +8294,7 @@ void ScInterpreter::ScDBCount() // so the source range has to be restricted, like before the introduction // of ScDBQueryParamBase. p->nCol1 = p->nCol2 = p->mnField; - ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab, *p, true); + ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab, *p, true, false); if ( aCellIter.GetFirst() ) { do @@ -10192,28 +10393,465 @@ utl::SearchParam::SearchType ScInterpreter::DetectSearchType( std::u16string_vie return utl::SearchParam::SearchType::Normal; } +bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, ScQueryEntry& rEntry, ScQueryEntry::Item& rItem ) +{ + SCSIZE nC, nR; + vsa.pMatSrc->GetDimensions( nC, nR); + if (nC > 1 && nR > 1) + { + // The source matrix must be a vector. + PushIllegalParameter(); + return false; + } + vsa.bVLookup = ( nC == 1 ); + + // Do not propagate errors from matrix while searching. + vsa.pMatSrc->SetErrorInterpreter( nullptr ); + + SCSIZE nMatCount = (vsa.bVLookup ? nR : nC); + VectorMatrixAccessor aMatAcc(*(vsa.pMatSrc), vsa.bVLookup); + bool bMatchWholeCell = mrDoc.GetDocOptions().IsMatchWholeCell(); + + switch ( vsa.eSearchMode ) + { + case searchfwd : + { + switch ( vsa.eMatchMode ) + { + case exactorNA : + case wildcard : + // simple serial search for equality mode (source data doesn't + // need to be sorted). + for (SCSIZE i = 0; i < nMatCount; ++i) + { + if (lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell ) == 0) + { + vsa.nHitIndex = i+1; // found ! + break; + } + } + break; + + case exactorS : + case exactorG : + for (SCSIZE i = 0; i < nMatCount; ++i) + { + sal_Int32 result = lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell ); + if (result == 0) + { + vsa.nHitIndex = i+1; // found ! + break; + } + else if (vsa.eMatchMode == exactorS && result == -1) + { + if ( vsa.nBestFit == SCSIZE_MAX ) + vsa.nBestFit = i; + else + { + // replace value of vsa.nBestFit if value(i) > value(vsa.nBestFit) + if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == 1 ) + vsa.nBestFit = i; + } + } + else if (vsa.eMatchMode == exactorG && result == 1) + { + if ( vsa.nBestFit == SCSIZE_MAX ) + vsa.nBestFit = i; + else + { + // replace value of vsa.nBestFit if value(i) < value(vsa.nBestFit) + if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == -1 ) + vsa.nBestFit = i; + } + } + // else do nothing + } + break; + + default : + PushIllegalParameter(); + return false; + } + } + break; + + case searchrev: + { + switch ( vsa.eMatchMode ) + { + case exactorNA : + case wildcard : + // simple serial search for equality mode (source data doesn't + // need to be sorted). + for ( SCSIZE i = nMatCount - 1; i > 0; i-- ) + { + if (lcl_CompareMatrix2Query(i, aMatAcc, rParam, rEntry, bMatchWholeCell) == 0) + { + vsa.nHitIndex = i + 1; // found ! + break; + } + } + break; + + case exactorS : + case exactorG : + for (SCSIZE i = nMatCount - 1; i-- > 0; ) + { + sal_Int32 result = lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell ); + if (result == 0) + { + vsa.nHitIndex = i + 1; // found ! + break; + } + else if (vsa.eMatchMode == exactorS && result == -1) + { + if ( vsa.nBestFit == SCSIZE_MAX ) + vsa.nBestFit = i; + else + { + // replace value of vsa.nBestFit if value(i) > value(vsa.nBestFit) + if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == 1 ) + vsa.nBestFit = i; + } + } + else if (vsa.eMatchMode == exactorG && result == 1) + { + if ( vsa.nBestFit == SCSIZE_MAX ) + vsa.nBestFit = i; + else + { + // replace value of vsa.nBestFit if value(i) < value(vsa.nBestFit) + if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == -1 ) + vsa.nBestFit = i; + } + } + // else do nothing + } + break; + + default : + PushIllegalParameter(); + return false; + } + } + break; + + case searchbasc: + case searchbdesc: + { + // binary search for non-equality mode (the source data is sorted) + bool bAscOrder = ( vsa.eSearchMode == searchbasc ); + SCSIZE nFirst = 0; + SCSIZE nLast = nMatCount - 1; + for ( SCSIZE nLen = nLast - nFirst; nLen > 0; nLen = nLast - nFirst ) + { + SCSIZE nMid = nFirst + nLen / 2; + sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc, rParam, rEntry, bMatchWholeCell ); + if ( nCmp == 0 ) + { + // exact match. find the last item with the same value. + lcl_GetLastMatch( nMid, aMatAcc, nMatCount); + vsa.nHitIndex = nMid + 1; + break; + } + + if ( nLen == 1 ) // first and last items are next to each other. + { + if ( bAscOrder && vsa.eMatchMode == exactorS ) + vsa.nHitIndex = ( nCmp > 0 ? nFirst : nLast ); + else if ( !bAscOrder && vsa.eMatchMode == exactorG ) + vsa.nHitIndex = ( nCmp < 0 ? nFirst : nLast ); + break; + } + else + { + if ( nCmp < 0 ) + { + if ( bAscOrder ) + nFirst = nMid; + else + nLast = nMid; + } + else + { + if ( bAscOrder ) + nLast = nMid; + else + nFirst = nMid; + } + + if ( vsa.nHitIndex == nMatCount - 1 ) // last item + { + nCmp = lcl_CompareMatrix2Query( vsa.nHitIndex, aMatAcc, rParam, rEntry, bMatchWholeCell ); + if ( ( vsa.eMatchMode == exactorS && nCmp <= 0 ) || + ( vsa.eMatchMode == exactorG && nCmp >= 0 ) ) + { + // either the last item is an exact match or the real + // hit is beyond the last item. + vsa.nHitIndex++; + } + else + vsa.nHitIndex = 0; + } + } + } + } + break; + + default: + PushIllegalParameter(); + return false; + } + + if ((vsa.nHitIndex > 0) && ((rItem.meType == ScQueryEntry::ByString && aMatAcc.IsValue(vsa.nHitIndex - 1)) || + (rItem.meType == ScQueryEntry::ByValue && !aMatAcc.IsValue(vsa.nHitIndex - 1)))) + { + vsa.nHitIndex = 0; + vsa.isResultNA = true; + return false; + } + return true; +} + +bool ScInterpreter::SearchRangeForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, ScQueryEntry& rEntry ) +{ + vsa.bVLookup = ( vsa.nCol1 == vsa.nCol2 ); + switch ( vsa.eSearchMode ) + { + case searchfwd: + case searchrev: + case searchbasc: + case searchbdesc: + { + if (vsa.bVLookup) + { + // search of rows in column + rParam.bByRow = true; + ScAddress aResultPos( vsa.nCol1, vsa.nRow1, vsa.nTab1 ); + const ScComplexRefData* refData = nullptr; + if ( LookupQueryWithCache( aResultPos, rParam, refData, vsa.eSearchMode, vsa.isXLookup ) ) + vsa.nHitIndex = aResultPos.Row() - vsa.nRow1 + 1; + } + else + { + // search of columns in row + rParam.bByRow = false; + bool bReverseSearch = (vsa.eSearchMode == searchrev); + ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, vsa.nTab1, rParam, false, bReverseSearch); + // Advance Entry.nField in Iterator if column changed + aCellIter.SetAdvanceQueryParamEntryField(true); + aCellIter.SetXlookupMode(vsa.isXLookup); + // TODO: no binary search for column (horizontal) search (use linear) + aCellIter.SetSortedBinarySearchMode(false); + if (rEntry.eOp == SC_EQUAL) + { + if (aCellIter.GetFirst()) + vsa.nHitIndex = aCellIter.GetCol() - vsa.nCol1 + 1; + } + else + { + SCCOL nC; + SCROW nR; + if (aCellIter.FindEqualOrSortedLastInRange(nC, nR)) + vsa.nHitIndex = nC - vsa.nCol1 + 1; + } + } + } + break; + + default : + PushIllegalParameter(); + return false; + } + return true; +} + + +/** When search value is found, the index is stored in struct VectorSearchArguments.nIndex + and SearchVectorForValue() returns true. When search value is not found or an error + occurs, SearchVectorForValue() pushes the relevant (error)message and returns false, + expect when SearchVectorForValue() is called by ScXLookup and the search value is not + found. + This difference in behaviour is because MATCH returns the found index and XLOOKUP + uses the found index to determine the result(s) to be pushed and may return a custom + value when the search value is not found. +*/ +bool ScInterpreter::SearchVectorForValue( VectorSearchArguments& vsa ) +{ + // preparations + ScQueryParam rParam; + rParam.nCol1 = vsa.nCol1; + rParam.nRow1 = vsa.nRow1; + rParam.nCol2 = vsa.nCol2; + rParam.nRow2 = vsa.nRow2; + rParam.nTab = vsa.nTab1; + + ScQueryEntry& rEntry = rParam.GetEntry(0); + rEntry = rParam.GetEntry(0); + rEntry.nField = vsa.eSearchMode != searchrev ? vsa.nCol1 : vsa.nCol2; + rEntry.bDoQuery = true; + ScQueryEntry::Item& rItem = rEntry.GetQueryItem(); + switch ( vsa.eMatchMode ) + { + case exactorNA : + rEntry.eOp = SC_EQUAL; + break; + + case exactorS : + rEntry.eOp = SC_LESS_EQUAL; + break; + + case exactorG : + rEntry.eOp = SC_GREATER_EQUAL; + break; + + case wildcard : + // this mode can only used with XLOOKUP + if ( vsa.isXLookup ) + { + rEntry.eOp = SC_EQUAL; + if ( vsa.isStringSearch ) + { + if ( mrDoc.IsInVBAMode() ) + rParam.eSearchType = utl::SearchParam::SearchType::Wildcard; + else + { + // set searchtype hard to wildcard or regexp if applicable, the XLOOKUP + // argument prevails over the configuration setting + if ( MayBeWildcard( vsa.sSearchStr.getString() ) ) + rParam.eSearchType = utl::SearchParam::SearchType::Wildcard; + else if ( MayBeRegExp( vsa.sSearchStr.getString() ) ) + rParam.eSearchType = utl::SearchParam::SearchType::Regexp; + } + } + } + else + { + PushIllegalParameter(); + return false; + } + break; + + default : + PushIllegalParameter(); + return false; + } + if ( vsa.isStringSearch ) + { + rItem.meType = ScQueryEntry::ByString; + rItem.maString = vsa.sSearchStr; + if ( !vsa.isXLookup ) + { + if ( mrDoc.IsInVBAMode() ) + rParam.eSearchType = utl::SearchParam::SearchType::Wildcard; + else + rParam.eSearchType = DetectSearchType(rEntry.GetQueryItem().maString.getString(), mrDoc); + } + } + else + { + rItem.mfVal = vsa.fSearchVal; + rItem.meType = ScQueryEntry::ByValue; + } + + // execute search + if (vsa.pMatSrc) // The source data is matrix array. + { + // matrix + if ( !SearchMatrixForValue( vsa, rParam, rEntry, rItem ) ) + return false; + } + else + { + // not a matrix + if ( !SearchRangeForValue( vsa, rParam, rEntry ) ) + return false; + } + + // MATCH expects index starting with 1, XLOOKUP expects index starting with 0 + if ( vsa.nHitIndex > 0 ) + { + vsa.nIndex = ( vsa.isXLookup ? --vsa.nHitIndex : vsa.nHitIndex ); + return true; + } + else if ( vsa.nHitIndex == 0 && vsa.nBestFit != SCSIZE_MAX ) + { + if ( vsa.isXLookup ) + { + vsa.nIndex = vsa.nBestFit; + if ( !vsa.pMatSrc ) + { + vsa.nIndex -= ( vsa.bVLookup ? vsa.nRow1 : vsa.nCol1 ); + } + } + else + { + vsa.nIndex = ++vsa.nBestFit; + } + return true; + } + + // nomatch + vsa.isResultNA = true; + return false; +} + static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInterpreterContext& rContext, const ScQueryParam & rParam, const ScQueryEntry & rEntry, const ScFormulaCell* cell, - const ScComplexRefData* refData ) + const ScComplexRefData* refData, sal_Int8 nSearchMode, bool bXlookupMode ) { if (rEntry.eOp != SC_EQUAL) { // range lookup <= or >= SCCOL nCol; SCROW nRow; - ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false); - if( aCellIter.FindEqualOrSortedLastInRange( nCol, nRow )) + bool bLessOrEqual = rEntry.eOp == SC_LESS || rEntry.eOp == SC_LESS_EQUAL; + // we can use binary search if the SearchMode is searchbasc or searchbdesc + if (ScQueryCellIteratorSortedCache::CanBeUsed(rDoc, rParam, rParam.nTab, cell, refData, rContext) || + (static_cast<SearchMode>(nSearchMode) == searchbasc && !bLessOrEqual) || + (static_cast<SearchMode>(nSearchMode) == searchbdesc && bLessOrEqual)) + { + // search for the first LessOrEqual value if SearchMode is desc or + // search for the first GreaterOrEqual value if SearchMode is asc + ScQueryCellIteratorSortedCache aCellIter(rDoc, rContext, rParam.nTab, rParam, false, false); + aCellIter.SetXlookupMode(bXlookupMode); + if (aCellIter.GetFirst()) + { + o_rResultPos.SetCol(aCellIter.GetCol()); + o_rResultPos.SetRow(aCellIter.GetRow()); + return true; + } + } + else { - o_rResultPos.SetCol( nCol); - o_rResultPos.SetRow( nRow); - return true; + // search for the last LessOrEqual value or GreaterOrEqual value + bool bReverse = (static_cast<SearchMode>(nSearchMode) == searchrev); + ScQueryCellIteratorDirect aCellIter(rDoc, rContext, rParam.nTab, rParam, false, bReverse); + + aCellIter.SetSortedBinarySearchMode(static_cast<SearchMode>(nSearchMode) == searchbasc || + static_cast<SearchMode>(nSearchMode) == searchbdesc); + aCellIter.SetXlookupMode(bXlookupMode); + if (aCellIter.FindEqualOrSortedLastInRange(nCol, nRow)) + { + o_rResultPos.SetCol(nCol); + o_rResultPos.SetRow(nRow); + return true; + } } } else // EQUAL { - if( ScQueryCellIteratorSortedCache::CanBeUsed( rDoc, rParam, rParam.nTab, cell, refData, rContext )) + // we can use binary search for rows if the SearchMode is searchbasc or searchbdesc + bool bLiteral = rParam.eSearchType == utl::SearchParam::SearchType::Normal && + rEntry.GetQueryItem().meType == ScQueryEntry::ByString; + bool bBinary = rParam.bByRow && + (bLiteral || rEntry.GetQueryItem().meType == ScQueryEntry::ByValue); + + if( bBinary && (ScQueryCellIteratorSortedCache::CanBeUsed( rDoc, rParam, rParam.nTab, cell, refData, rContext ) || + static_cast<SearchMode>(nSearchMode) == searchbasc || static_cast<SearchMode>(nSearchMode) == searchbdesc )) { - ScQueryCellIteratorSortedCache aCellIter( rDoc, rContext, rParam.nTab, rParam, false); + ScQueryCellIteratorSortedCache aCellIter( rDoc, rContext, rParam.nTab, rParam, false, false ); + aCellIter.SetXlookupMode(bXlookupMode); if (aCellIter.GetFirst()) { o_rResultPos.SetCol( aCellIter.GetCol()); @@ -10223,7 +10861,9 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter } else { - ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false); + bool bReverse = (static_cast<SearchMode>(nSearchMode) == searchrev); + ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false, bReverse ); + aCellIter.SetXlookupMode(bXlookupMode); if (aCellIter.GetFirst()) { o_rResultPos.SetCol( aCellIter.GetCol()); @@ -10274,12 +10914,12 @@ static SCROW lcl_getPrevRowWithEmptyValueLookup( const ScLookupCache& rCache, } bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos, - const ScQueryParam & rParam, const ScComplexRefData* refData ) const + const ScQueryParam & rParam, const ScComplexRefData* refData, + sal_Int8 nSearchMode, bool bXlookupMode ) const { bool bFound = false; const ScQueryEntry& rEntry = rParam.GetEntry(0); bool bColumnsMatch = (rParam.nCol1 == rEntry.nField); - OSL_ENSURE( bColumnsMatch, "ScInterpreter::LookupQueryWithCache: columns don't match"); // At least all volatile functions that generate indirect references have // to force non-cached lookup. /* TODO: We could further classify volatile functions into reference @@ -10287,13 +10927,14 @@ bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos, * direct lookups here. We could even further attribute volatility per * parameter so it would affect only the lookup range parameter. */ if (!bColumnsMatch || GetVolatileType() != NOT_VOLATILE) - bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell, refData); + bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell, + refData, nSearchMode, bXlookupMode ); else { ScRange aLookupRange( rParam.nCol1, rParam.nRow1, rParam.nTab, rParam.nCol2, rParam.nRow2, rParam.nTab); ScLookupCache& rCache = mrDoc.GetLookupCache( aLookupRange, &mrContext ); - ScLookupCache::QueryCriteria aCriteria( rEntry); + ScLookupCache::QueryCriteria aCriteria( rEntry ); ScLookupCache::Result eCacheResult = rCache.lookup( o_rResultPos, aCriteria, aPos); @@ -10318,7 +10959,8 @@ bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos, { case ScLookupCache::NOT_CACHED : case ScLookupCache::CRITERIA_DIFFERENT : - bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell, refData); + bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, + pMyFormulaCell, refData, nSearchMode, bXlookupMode ); if (eCacheResult == ScLookupCache::NOT_CACHED) rCache.insert( o_rResultPos, aCriteria, aPos, bFound); break; diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 95dff9f1cc18..60190bac72b3 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -4326,6 +4326,7 @@ StackVar ScInterpreter::Interpret() case ocCountIfs : ScCountIfs(); break; case ocLookup : ScLookup(); break; case ocVLookup : ScVLookup(); break; + case ocXLookup : ScXLookup(); break; case ocHLookup : ScHLookup(); break; case ocIndex : ScIndex(); break; case ocMultiArea : ScMultiArea(); break; diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx index 473177c8fca0..e6a5cda2f19f 100644 --- a/sc/source/core/tool/parclass.cxx +++ b/sc/source/core/tool/parclass.cxx @@ -264,6 +264,7 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] = { ocVarS, {{ Reference }, 1, Value }}, { ocWhitespace, {{ Bounds }, 0, Bounds }}, { ocWorkday_MS, {{ Value, Value, Value, Reference }, 0, Value }}, + { ocXLookup, {{ Value, ReferenceOrForceArray, ReferenceOrForceArray, Value, Value, Value }, 0, Value }}, { ocXor, {{ Reference }, 1, Value }}, { ocZTest, {{ Reference, Value, Value }, 0, Value }}, { ocZTest_MS, {{ Reference, Value, Value }, 0, Value }}, diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 25c5b6f05f79..114bdae1497a 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -1387,6 +1387,7 @@ void ScTokenArray::CheckToken( const FormulaToken& r ) case ocCount: case ocCount2: case ocVLookup: + case ocXLookup: case ocSLN: case ocIRR: case ocMIRR: diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx index 2612f0d3dc45..f0e5b09a0e4b 100644 --- a/sc/source/filter/excel/xlformula.cxx +++ b/sc/source/filter/excel/xlformula.cxx @@ -593,6 +593,18 @@ const XclFunctionInfo saFuncTable_2016[] = EXC_FUNCENTRY_V_VR( ocMaxIfs_MS, 3, MX, 0, "MAXIFS" ) }; + +/** Functions new in Excel 2021. + + + @See sc/source/filter/oox/formulabase.cxx saFuncTable2021 for V,VR,RO,... + */ +const XclFunctionInfo saFuncTable_2021[] = +{ + EXC_FUNCENTRY_V_VR( ocXLookup, 3, 6, 0, "XLOOKUP" ) +}; + + #define EXC_FUNCENTRY_ODF( opcode, minparam, maxparam, flags, asciiname ) \ { opcode, NOID, minparam, maxparam, V, { VR }, EXC_FUNCFLAG_IMPORTONLY|(flags), EXC_FUNCNAME_ODF( asciiname ) }, \ { opcode, 255, (minparam)+1, (maxparam)+1, V, { RO_E, RO }, EXC_FUNCFLAG_EXPORTONLY|(flags), EXC_FUNCNAME_ODF( asciiname ) } @@ -669,6 +681,7 @@ XclFunctionProvider::XclFunctionProvider( const XclRoot& rRoot ) (this->*pFillFunc)(saFuncTable_2010, std::end(saFuncTable_2010)); (this->*pFillFunc)(saFuncTable_2013, std::end(saFuncTable_2013)); (this->*pFillFunc)(saFuncTable_2016, std::end(saFuncTable_2016)); + (this->*pFillFunc)(saFuncTable_2021, std::end(saFuncTable_2021)); (this->*pFillFunc)(saFuncTable_Odf, std::end(saFuncTable_Odf)); (this->*pFillFunc)(saFuncTable_OOoLO, std::end(saFuncTable_OOoLO)); } diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx index 464d30d9d2d8..6ee06ff6b89b 100644 --- a/sc/source/filter/oox/formulabase.cxx +++ b/sc/source/filter/oox/formulabase.cxx @@ -866,6 +866,20 @@ const FunctionData saFuncTable2016[] = }; + +/** Functions new in Excel 2021. + + + @See sc/source/filter/excel/xlformula.cxx saFuncTable_2021 + */ +/* FIXME: BIFF?? function identifiers available? Where to obtain? */ +const FunctionData saFuncTable2021[] = +{ + { "COM.MICROSOFT.XLOOKUP", "XLOOKUP", NOID, NOID, 3, 6, V, { VR, VA, VR }, FuncFlags::MACROCALL_NEW } +}; + + + /** Functions defined by OpenFormula, but not supported by Calc or by Excel. */ const FunctionData saFuncTableOdf[] = { @@ -1008,6 +1022,7 @@ FunctionProviderImpl::FunctionProviderImpl( bool bImportFilter ) initFuncs(saFuncTable2010 , std::end(saFuncTable2010) , bImportFilter); initFuncs(saFuncTable2013 , std::end(saFuncTable2013) , bImportFilter); initFuncs(saFuncTable2016 , std::end(saFuncTable2016) , bImportFilter); + initFuncs(saFuncTable2021 , std::end(saFuncTable2021 ), bImportFilter); initFuncs(saFuncTableOdf , std::end(saFuncTableOdf) , bImportFilter); initFuncs(saFuncTableOOoLO, std::end(saFuncTableOOoLO), bImportFilter); } |