summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/queryiter.hxx18
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods406
-rw-r--r--sc/source/core/data/queryiter.cxx57
-rw-r--r--sc/source/core/tool/interpr1.cxx22
4 files changed, 423 insertions, 80 deletions
diff --git a/sc/inc/queryiter.hxx b/sc/inc/queryiter.hxx
index e34a7be20e13..662fe8a9cf35 100644
--- a/sc/inc/queryiter.hxx
+++ b/sc/inc/queryiter.hxx
@@ -171,8 +171,16 @@ protected:
nTestEqualConditionFulfilled = nTestEqualConditionEnabled | nTestEqualConditionMatched
};
+ enum SortedBinarySearchBits
+ {
+ nBinarySearchDisabled = 0x00,
+ nSearchbAscd = 0x01,
+ nSearchbDesc = 0x02,
+ };
+
sal_uInt8 nStopOnMismatch;
sal_uInt8 nTestEqualCondition;
+ sal_uInt8 nSortedBinarySearch;
bool bAdvanceQuery;
bool bIgnoreMismatchOnLeadingStrings;
bool bSortedBinarySearch;
@@ -263,8 +271,11 @@ public:
{ bAdvanceQuery = bVal; }
void AdvanceQueryParamEntryField();
- void SetSortedBinarySearchMode( bool bVal )
- { bSortedBinarySearch = bVal; }
+ void SetSortedBinarySearchMode( sal_Int8 nSearchMode )
+ {
+ nSortedBinarySearch = sal::static_int_cast<sal_uInt8>(nSearchMode == 2 ?
+ nSearchbAscd : (nSearchMode == -2 ? nSearchbDesc : nBinarySearchDisabled));
+ }
void SetXlookupMode( bool bVal )
{ bXLookUp = bVal; }
@@ -309,11 +320,12 @@ class ScQueryCellIterator
using Base::nStopOnMismatchEnabled;
using Base::nTestEqualCondition;
using Base::nTestEqualConditionEnabled;
+ using Base::nSortedBinarySearch;
+ using Base::nBinarySearchDisabled;
using Base::PerformQuery;
using Base::getThisResult;
using Base::nBestFitCol;
using Base::nBestFitRow;
- using Base::bSortedBinarySearch;
using Base::bXLookUp;
bool GetThis();
diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods
index 16abcbcacb4b..49ecf573b50c 100644
--- a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods
+++ b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods
@@ -1,7 +1,7 @@
<?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:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT1H12M</meta:editing-duration><meta:editing-cycles>22</meta:editing-cycles><meta:generator>LibreOfficeDev/24.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/2b1f5fa987f02ec8014dbf6837c6b090faf11f2d</meta:generator><dc:date>2024-02-01T11:50:13.789000000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="858" 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>
@@ -30,13 +30,13 @@
<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="CursorPositionX" config:type="int">1</config:config-item>
+ <config:config-item config:name="CursorPositionY" config:type="int">115</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="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>
@@ -48,7 +48,7 @@
</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="HorizontalScrollbarWidth" config:type="int">1837</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>
@@ -126,7 +126,7 @@
<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 config:name="CodeName" config:type="string">Munkalap1</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>
@@ -1597,6 +1597,9 @@
<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="co9" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="1.875cm"/>
+ </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>
@@ -1610,7 +1613,7 @@
<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:table-row-properties style:row-height="1.632cm" 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"/>
@@ -1673,6 +1676,7 @@
<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:style style:name="ce20" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"/>
<style:page-layout style:name="pm1">
<style:page-layout-properties style:writing-mode="lr-tb"/>
<style:header-style>
@@ -1715,7 +1719,7 @@
<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>
+ <text:p><text:date style:data-style-name="N2" text:date-value="2024-02-01">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="14:12:01.197000000">00:00:00</text:time></text:p>
</style:region-right>
</style:header>
<style:header-left style:display="false"/>
@@ -1773,7 +1777,7 @@
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
- <table:table-cell table:style-name="ce14" table:formula="of:=AND([Sheet2.C2:.C201])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <table:table-cell table:style-name="ce14" table:formula="of:=AND([Sheet2.C2:.C202])" 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">
@@ -1804,7 +1808,8 @@
<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-column table:style-name="co4" table:number-columns-repeated="14" table:default-cell-style-name="Default"/>
+ <table:table-column table:style-name="co9" 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>
@@ -1846,7 +1851,24 @@
<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-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>Country Asc1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Country Asc2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Country Desc1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Country Desc2</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-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">
@@ -1880,7 +1902,16 @@
<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-cell table:number-columns-repeated="3"/>
+ <table:table-cell table:number-columns-repeated="2" 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="2" 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="string" calcext:value-type="string">
+ <text:p>a</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;India&quot;;[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+91" calcext:value-type="string">
@@ -1911,7 +1942,16 @@
<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-cell table:number-columns-repeated="3"/>
+ <table:table-cell table:number-columns-repeated="2" 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="2" 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="string" calcext:value-type="string">
+ <text:p>b</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;INDIA&quot;;[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+91" calcext:value-type="string">
@@ -1942,14 +1982,26 @@
<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-cell table:number-columns-repeated="3"/>
+ <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="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2" office:value-type="float" office:value="7" calcext:value-type="float">
+ <text:p>7</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce20" office:value-type="string" calcext:value-type="string">
+ <text:p>c</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Ireland&quot;;[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="" calcext:value-type="error">
- <text:p>#N/A</text:p>
+ <text:p>#HIÁNYZIK</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>
+ <text:p>#HIÁNYZIK</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>
@@ -1973,7 +2025,19 @@
<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-cell table:number-columns-repeated="3"/>
+ <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="2" calcext:value-type="float">
+ <text:p>2</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 office:value-type="string" calcext:value-type="string">
+ <text:p>d</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Ireland&quot;;[.H2:.H11];[.J2:.J11];&quot;&quot;)">
@@ -2004,7 +2068,16 @@
<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-cell table:number-columns-repeated="3"/>
+ <table:table-cell table:number-columns-repeated="2" 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="2" 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="string" calcext:value-type="string">
+ <text:p>e</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Ireland&quot;;[.H2:.H11];[.J2:.J11];-99)" office:value-type="float" office:value="-99" calcext:value-type="float">
@@ -2032,7 +2105,16 @@
<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-cell table:number-columns-repeated="3"/>
+ <table:table-cell table:number-columns-repeated="2" 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="2" 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>f</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Ireland&quot;;[.H2:.H11];[.J2:.J11];&quot;Not here&quot;)" office:value-type="string" office:string-value="Not here" calcext:value-type="string">
@@ -2063,14 +2145,26 @@
<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-cell table:number-columns-repeated="3"/>
+ <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 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="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-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;&quot;;[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="" calcext:value-type="error">
- <text:p>#N/A</text:p>
+ <text:p>#HIÁNYZIK</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>
+ <text:p>#HIÁNYZIK</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>
@@ -2094,7 +2188,19 @@
<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-cell table:number-columns-repeated="3"/>
+ <table:table-cell table:number-columns-repeated="2" 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="1" calcext:value-type="float">
+ <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="string" calcext:value-type="string">
+ <text:p>h</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Nigeria&quot;;[.H2:.H11];[.J2:.J11];;;1)" office:value-type="string" office:string-value="00234" calcext:value-type="string">
@@ -2125,7 +2231,16 @@
<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-cell table:number-columns-repeated="3"/>
+ <table:table-cell table:number-columns-repeated="2" 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="2" office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>I</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Nigeria&quot;;[.H2:.H11];[.J2:.J11];;;-1)" office:value-type="string" office:string-value="+234" calcext:value-type="string">
@@ -2156,7 +2271,16 @@
<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-cell table:number-columns-repeated="3"/>
+ <table:table-cell table:number-columns-repeated="2" 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="2" 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="string" calcext:value-type="string">
+ <text:p>j</text:p>
+ </table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
@@ -2385,10 +2509,10 @@
</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(&quot;&quot;;[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="" calcext:value-type="error">
- <text:p>#N/A</text:p>
+ <text:p>#HIÁNYZIK</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>
+ <text:p>#HIÁNYZIK</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>
@@ -2400,10 +2524,10 @@
</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>
+ <text:p>#HIÁNYZIK</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>
+ <text:p>#HIÁNYZIK</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>
@@ -2546,8 +2670,8 @@
<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:style-name="ce18" table:formula="of:=[.A30]=[.B30]" 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([.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>
@@ -2588,7 +2712,7 @@
</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>
+ <text:p>#HIÁNYZIK</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>#N/A</text:p>
@@ -2937,14 +3061,14 @@
</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>
+ <text:p>Hiba: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:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="=SZUM(XLOOKUP(G44;H45:H49;K45:K49):XLOOKUP(G45;H45:H49;K45:K49))" calcext:value-type="string">
+ <text:p>=SZUM(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>
@@ -3067,7 +3191,7 @@
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;B&quot;;[.H51:.H53];[.K51:.K52])" office:value-type="string" office:string-value="" calcext:value-type="error">
- <text:p>Err:504</text:p>
+ <text:p>Hiba:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
@@ -3100,7 +3224,7 @@
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.H51:.H53];[.K51:.K52])" office:value-type="string" office:string-value="" calcext:value-type="error">
- <text:p>Err:504</text:p>
+ <text:p>Hiba:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
@@ -3133,7 +3257,7 @@
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;E&quot;;[.H51:.I53];[.K51:.L53])" office:value-type="string" office:string-value="" calcext:value-type="error">
- <text:p>Err:504</text:p>
+ <text:p>Hiba:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
@@ -3166,7 +3290,7 @@
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;E&quot;;[.H51:.I53];[.K51:.K53])" office:value-type="string" office:string-value="" calcext:value-type="error">
- <text:p>Err:504</text:p>
+ <text:p>Hiba:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
@@ -3185,7 +3309,7 @@
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.H51:.I53];[.K51:.K53])" office:value-type="string" office:string-value="" calcext:value-type="error">
- <text:p>Err:504</text:p>
+ <text:p>Hiba:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
@@ -4197,7 +4321,7 @@
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C?&quot;;[.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>
+ <text:p>#HIÁNYZIK</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>#N/A</text:p>
@@ -4346,7 +4470,7 @@
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;f?&quot;;[.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>
+ <text:p>#HIÁNYZIK</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>#N/A</text:p>
@@ -4515,7 +4639,7 @@
</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>
+ <text:p>#HIÁNYZIK</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>#N/A</text:p>
@@ -4528,19 +4652,209 @@
</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-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([.$O$1];[.P$1:.P$11];[.T$1:.T$11];;0;2)" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#HIÁNYZIK</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([.A113])" 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([.A113])" office:value-type="string" office:string-value="=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;0;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;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([.$O$1];[.P$1:.P$11];[.T$1:.T$11];;-1;2)" office:value-type="string" office:string-value="b" 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>b</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A114]=[.B114]" 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([.A114])" office:value-type="string" office:string-value="=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;-1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;-1;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([.$O$1];[.P$1:.P$11];[.T$1:.T$11];;1;2)" office:value-type="string" office:string-value="d" 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>d</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A115]=[.B115]" 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([.A115])" office:value-type="string" office:string-value="=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;1;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([.$O$1];[.Q$1:.Q$11];[.T$1:.T$11];;0;2)" office:value-type="string" office:string-value="c" 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>c</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A116]=[.B116]" 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([.A116])" office:value-type="string" office:string-value="=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;0;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;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([.$O$1];[.Q$1:.Q$11];[.T$1:.T$11];;-1;2)" office:value-type="string" office:string-value="c" 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>c</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A117]=[.B117]" 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([.A117])" office:value-type="string" office:string-value="=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;-1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;-1;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([.$O$1];[.Q$1:.Q$11];[.T$1:.T$11];;1;2)" office:value-type="string" office:string-value="c" 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>c</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A118]=[.B118]" 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([.A118])" office:value-type="string" office:string-value="=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;1;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: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([.$O$1];[.R$1:.R$11];[.T$1:.T$11];;0;-2)" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#HIÁNYZIK</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([.A120])" 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([.A120])" office:value-type="string" office:string-value="=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;0;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;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([.$O$1];[.R$1:.R$11];[.T$1:.T$11];;-1;-2)" office:value-type="string" office:string-value="I" calcext:value-type="string">
+ <text:p>I</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:style-name="ce18" table:formula="of:=[.A121]=[.B121]" 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([.A121])" office:value-type="string" office:string-value="=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;-1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;-1;-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([.$O$1];[.R$1:.R$11];[.T$1:.T$11];;1;-2)" 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:=[.A122]=[.B122]" 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([.A122])" office:value-type="string" office:string-value="=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;1;-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([.$O$1];[.S$1:.S$11];[.T$1:.T$11];;0;-2)" office:value-type="string" office:string-value="h" calcext:value-type="string">
+ <text:p>h</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:style-name="ce18" table:formula="of:=[.A123]=[.B123]" 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([.A123])" office:value-type="string" office:string-value="=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;0;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;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([.$O$1];[.S$1:.S$11];[.T$1:.T$11];;-1;-2)" office:value-type="string" office:string-value="h" calcext:value-type="string">
+ <text:p>h</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:style-name="ce18" table:formula="of:=[.A124]=[.B124]" 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([.A124])" office:value-type="string" office:string-value="=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;-1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;-1;-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([.$O$1];[.S$1:.S$11];[.T$1:.T$11];;1;-2)" office:value-type="string" office:string-value="h" calcext:value-type="string">
+ <text:p>h</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:style-name="ce18" table:formula="of:=[.A125]=[.B125]" 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([.A125])" office:value-type="string" office:string-value="=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;1;-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="77">
<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-row table:style-name="ro2" table:number-rows-repeated="1048373">
<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:conditional-format calcext:target-range-address="Sheet2.C2:Sheet2.C202">
<calcext:condition calcext:apply-style-name="Default" calcext:value="=&quot;&quot;" 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"/>
diff --git a/sc/source/core/data/queryiter.cxx b/sc/source/core/data/queryiter.cxx
index 39b86fe173c0..43996b1693eb 100644
--- a/sc/source/core/data/queryiter.cxx
+++ b/sc/source/core/data/queryiter.cxx
@@ -64,9 +64,9 @@ ScQueryCellIteratorBase< accessType, queryType >::ScQueryCellIteratorBase(ScDocu
: AccessBase( rDocument, rContext, rParam, bReverse )
, nStopOnMismatch( nStopOnMismatchDisabled )
, nTestEqualCondition( nTestEqualConditionDisabled )
+ , nSortedBinarySearch( nBinarySearchDisabled )
, bAdvanceQuery( false )
, bIgnoreMismatchOnLeadingStrings( false )
- , bSortedBinarySearch( false )
, bXLookUp( false )
, nBestFitCol(SCCOL_MAX)
, nBestFitRow(SCROW_MAX)
@@ -206,8 +206,8 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
if ( aCell.isEmpty())
return;
- // 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) &&
+ // XLookUp: Forward/asc/backward/desc search for best fit value, except if we have an exact match
+ if (bXLookUp && (rEntry.eOp == SC_LESS_EQUAL || rEntry.eOp == SC_GREATER_EQUAL) &&
(nBestFitCol != nCol || nBestFitRow != nRow))
{
bool bNumSearch = rItem.meType == ScQueryEntry::ByValue && aCell.hasNumeric();
@@ -314,14 +314,18 @@ void ScQueryCellIteratorBase< accessType, queryType >::InitPos()
// non-matching position using SC_LESS and the start position
// is the one after it.
lastRow = nRow;
- ScQueryOp saveOp = op;
- op = SC_LESS;
- if( BinarySearch( nCol, true ))
- beforeRow = nRow;
- // If BinarySearch() returns false, there was no match, which means
- // there's no value smaller. In that case BinarySearch() has set
- // the position to the first row in the range.
- op = saveOp; // back to SC_EQUAL
+ // BinarySearch() looks for the first match for XLOOKUP
+ if (!bXLookUp)
+ {
+ ScQueryOp saveOp = op;
+ op = SC_LESS;
+ if( BinarySearch( nCol, true ))
+ beforeRow = nRow;
+ // If BinarySearch() returns false, there was no match, which means
+ // there's no value smaller. In that case BinarySearch() has set
+ // the position to the first row in the range.
+ op = saveOp; // back to SC_EQUAL
+ }
}
else if( maParam.GetEntry(0).GetQueryItem().mbMatchEmpty
&& rDoc.IsEmptyData(nCol, maParam.nRow1, nCol, maParam.nRow2, nTab))
@@ -337,8 +341,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::InitPos()
if( BinarySearch( nCol ))
lastRow = nRow;
}
- bool bFirstMatch = (bXLookUp && op != SC_EQUAL);
- AccessBase::InitPosFinish(beforeRow, lastRow, bFirstMatch);
+ AccessBase::InitPosFinish(beforeRow, lastRow, bXLookUp);
}
}
@@ -542,8 +545,13 @@ bool ScQueryCellIteratorBase< accessType, queryType >::BinarySearch( SCCOL col,
{
if (fLastInRangeValue <= nCellVal)
{
- fLastInRangeValue = nCellVal;
- nLastInRange = i;
+ if (bXLookUp && nSortedBinarySearch != nSearchbDesc && fLastInRangeValue == nCellVal && aIndexer.getLowIndex() != i)
+ bDone = true;
+ else
+ {
+ fLastInRangeValue = nCellVal;
+ nLastInRange = i;
+ }
}
else if (fLastInRangeValue >= nCellVal)
{
@@ -585,8 +593,13 @@ bool ScQueryCellIteratorBase< accessType, queryType >::BinarySearch( SCCOL col,
aCellStr);
if (nTmp <= 0)
{
- aLastInRangeString = aCellStr;
- nLastInRange = i;
+ if (bXLookUp && nSortedBinarySearch != nSearchbDesc && nTmp == 0 && aIndexer.getLowIndex() != i)
+ bDone = true;
+ else
+ {
+ aLastInRangeString = aCellStr;
+ nLastInRange = i;
+ }
}
else if (nTmp > 0)
{
@@ -654,8 +667,10 @@ bool ScQueryCellIteratorBase< accessType, queryType >::BinarySearch( SCCOL col,
{
found = i;
nLastInRange = i;
- // But keep searching to find the last matching one.
- nLo = nMid + 1;
+ if (bXLookUp && (nSortedBinarySearch == nSearchbAscd && (rEntry.eOp == SC_LESS_EQUAL || rEntry.eOp == SC_EQUAL)))
+ bDone = true;
+ else // But keep searching to find the last matching one.
+ nLo = nMid + 1;
}
else if (bAscending)
{
@@ -732,7 +747,7 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo
nFoundCol = rDoc.MaxCol()+1;
nFoundRow = rDoc.MaxRow()+1;
- if (bXLookUp && !bSortedBinarySearch)
+ if (bXLookUp && nSortedBinarySearch == nBinarySearchDisabled)
SetStopOnMismatch( false ); // assume not sorted keys for XLookup
else
SetStopOnMismatch( true ); // assume sorted keys
@@ -747,7 +762,7 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo
(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)
+ if (bBinary && bXLookUp && nSortedBinarySearch == nBinarySearchDisabled)
bBinary = false;
bool bFound = false;
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 6b82844f95ce..22fc30c23976 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -10642,7 +10642,7 @@ bool ScInterpreter::SearchRangeForValue( VectorSearchArguments& vsa, ScQueryPara
aCellIter.SetAdvanceQueryParamEntryField(true);
aCellIter.SetXlookupMode(vsa.isXLookup);
// TODO: no binary search for column (horizontal) search (use linear)
- aCellIter.SetSortedBinarySearchMode(false);
+ aCellIter.SetSortedBinarySearchMode(vsa.eSearchMode);
if (rEntry.eOp == SC_EQUAL)
{
if (aCellIter.GetFirst())
@@ -10807,13 +10807,14 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter
SCROW 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))
+ if ((static_cast<SearchMode>(nSearchMode) == searchbasc && !bLessOrEqual) ||
+ (static_cast<SearchMode>(nSearchMode) == searchbdesc && bLessOrEqual) ||
+ ScQueryCellIteratorSortedCache::CanBeUsed(rDoc, rParam, rParam.nTab, cell, refData, rContext))
{
// 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.SetSortedBinarySearchMode(nSearchMode);
aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.GetFirst())
{
@@ -10828,8 +10829,7 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter
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.SetSortedBinarySearchMode(nSearchMode);
aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.FindEqualOrSortedLastInRange(nCol, nRow))
{
@@ -10847,10 +10847,11 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter
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 ))
+ if( bBinary && (static_cast<SearchMode>(nSearchMode) == searchbasc || static_cast<SearchMode>(nSearchMode) == searchbdesc ||
+ ScQueryCellIteratorSortedCache::CanBeUsed(rDoc, rParam, rParam.nTab, cell, refData, rContext)))
{
ScQueryCellIteratorSortedCache aCellIter( rDoc, rContext, rParam.nTab, rParam, false, false );
+ aCellIter.SetSortedBinarySearchMode(nSearchMode);
aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.GetFirst())
{
@@ -10861,8 +10862,9 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter
}
else
{
- bool bReverse = (static_cast<SearchMode>(nSearchMode) == searchrev);
- ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false, bReverse );
+ ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false,
+ static_cast<SearchMode>(nSearchMode) == searchrev);
+ aCellIter.SetSortedBinarySearchMode(nSearchMode);
aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.GetFirst())
{