configure.ac                            |    2 
 sc/qa/unit/data/ods/autoheight2rows.ods |binary
 sc/qa/unit/data/ods/tdf62268.ods        |binary
 sc/qa/unit/helper/qahelper.cxx          |    3 -
 sc/qa/unit/subsequent_export-test.cxx   |   59 +++++++++++++----------------
 sc/qa/unit/subsequent_filters-test.cxx  |   65 ++++++++++++++++++++++++++++++--
 sc/source/core/data/segmenttree.cxx     |    4 +
 sc/source/filter/xml/xmlimprt.cxx       |   20 +++++++++
 sc/source/filter/xml/xmlimprt.hxx       |    4 +
 sc/source/filter/xml/xmlrowi.cxx        |   15 +++++++
 10 files changed, 134 insertions(+), 38 deletions(-)

New commits:
commit 05e407d7083d598691190090f244c75f1d18915a
Author:     Thorsten Behrens <thorsten.behr...@cib.de>
AuthorDate: Mon Feb 17 00:55:36 2020 +0100
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Mon Feb 17 00:55:36 2020 +0100

    Release 6.2.9.3
    
    Change-Id: I54a07b03e58fa3e600321b484132f98c8a8a7793

diff --git a/configure.ac b/configure.ac
index 6d962c3acddf..b3724fff8595 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,7 +9,7 @@ dnl in order to create a configure script.
 # several non-alphanumeric characters, those are split off and used only for 
the
 # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no 
idea.
 
-AC_INIT([LibreOffice],[6.2.9.2],[],[],[http://documentfoundation.org/])
+AC_INIT([LibreOffice],[6.2.9.3],[],[],[http://documentfoundation.org/])
 
 AC_PREREQ([2.59])
 
commit 486aba66bb8456ae9f7989d2bef1dec886dd9d8d
Author:     Thorsten Behrens <thorsten.behr...@cib.de>
AuthorDate: Sun Feb 16 12:14:01 2020 +0100
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Mon Feb 17 00:54:17 2020 +0100

    tdf#123971 don't clobber entire RowHeight range on updates
    
    Use start index from current loop variable, not full range; otherwise
    we're always clobbering values from (possibly higher) upper rows.
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88785
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de>
    (cherry picked from commit f55140c7376c330bcdac071592aada75e8781e19)
    
    Conflicts:
            sc/qa/unit/subsequent_filters-test.cxx
    
    Change-Id: I3add7c2358710f4ae3927e7b0a1c1ff544965a03

diff --git a/sc/qa/unit/data/ods/autoheight2rows.ods 
b/sc/qa/unit/data/ods/autoheight2rows.ods
index b687701240c1..099df137ff64 100644
Binary files a/sc/qa/unit/data/ods/autoheight2rows.ods and 
b/sc/qa/unit/data/ods/autoheight2rows.ods differ
diff --git a/sc/qa/unit/subsequent_filters-test.cxx 
b/sc/qa/unit/subsequent_filters-test.cxx
index 6b6b3deaf6a1..4266fed9bbf4 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -4295,11 +4295,16 @@ void ScFiltersTest::testAutoheight2Rows()
 
     SCTAB nTab = 0;
     int nHeight1 = rDoc.GetRowHeight(0, nTab, false);
-    int nHeight3 = rDoc.GetRowHeight(2, nTab, false);
+    int nHeight2 = rDoc.GetRowHeight(1, nTab, false);
+    int nHeight4 = rDoc.GetRowHeight(3, nTab, false);
+    int nHeight5 = rDoc.GetRowHeight(4, nTab, false);
 
     // We will do relative comparison, because calculated autoheight
     // can be different on different platforms
-    CPPUNIT_ASSERT_MESSAGE("Row #3 shoud be thinner than #1", nHeight3 < 
nHeight1);
+    CPPUNIT_ASSERT_MESSAGE("Row #1 and row #4 must have same height after load 
& auto-adjust",
+                           abs( nHeight1 - nHeight4 ) < 10 );
+    CPPUNIT_ASSERT_MESSAGE("Row #2 and row #5 must have same height after load 
& auto-adjust",
+                           abs( nHeight2 - nHeight5 ) < 10 );
 
     xDocSh->DoClose();
 }
diff --git a/sc/source/core/data/segmenttree.cxx 
b/sc/source/core/data/segmenttree.cxx
index 4c01deb06172..0f96946d806a 100644
--- a/sc/source/core/data/segmenttree.cxx
+++ b/sc/source/core/data/segmenttree.cxx
@@ -106,7 +106,9 @@ void ScFlatSegmentsImpl<ValueType_, 
ExtValueType_>::setValueIf(SCCOLROW nPos1, S
         getRangeData(nCurrentStartRow, aRangeData);
         if (rPredicate(aRangeData.mnValue))
         {
-            setValue(nPos1, std::min<SCCOLROW>(nPos2, aRangeData.mnPos2), 
nValue);
+            // set value from current iteration point on, til end of range.
+            // Note that aRangeData may well contain much lower values for 
nPos1
+            setValue(nCurrentStartRow, std::min<SCCOLROW>(nPos2, 
aRangeData.mnPos2), nValue);
         }
 
         // even if nPos2 is bigger than nPos2 this should terminate the loop
commit facee65a643ff82eda0dd6f03b7e94cf900f59e0
Author:     Vasily Melenchuk <vasily.melenc...@cib.de>
AuthorDate: Wed Apr 24 12:50:50 2019 +0300
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Mon Feb 17 00:51:36 2020 +0100

    calc: extra unittest for rows autoheight on load
    
    Change-Id: Ie5310d3c3d4fde59a0718dbda228c638b7e0c366
    Reviewed-on: https://gerrit.libreoffice.org/71235
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de>
    (cherry picked from commit 5a2aba31867e0912700f6c976f152116d902fe21)

diff --git a/sc/qa/unit/data/ods/autoheight2rows.ods 
b/sc/qa/unit/data/ods/autoheight2rows.ods
new file mode 100644
index 000000000000..b687701240c1
Binary files /dev/null and b/sc/qa/unit/data/ods/autoheight2rows.ods differ
diff --git a/sc/qa/unit/subsequent_filters-test.cxx 
b/sc/qa/unit/subsequent_filters-test.cxx
index c6d3bc4f644e..6b6b3deaf6a1 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -253,6 +253,7 @@ public:
     void testCharacterSetXLSXML();
     void testTdf62268();
     void testVBAMacroFunctionODS();
+    void testAutoheight2Rows();
 
     CPPUNIT_TEST_SUITE(ScFiltersTest);
     CPPUNIT_TEST(testBooleanFormatXLSX);
@@ -391,6 +392,7 @@ public:
     CPPUNIT_TEST(testCondFormatFormulaListenerXLSX);
     CPPUNIT_TEST(testTdf62268);
     CPPUNIT_TEST(testVBAMacroFunctionODS);
+    CPPUNIT_TEST(testAutoheight2Rows);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -4286,6 +4288,22 @@ void ScFiltersTest::testVBAMacroFunctionODS()
     xDocSh->DoClose();
 }
 
+void ScFiltersTest::testAutoheight2Rows()
+{
+    ScDocShellRef xDocSh = loadDoc("autoheight2rows.", FORMAT_ODS);
+    ScDocument& rDoc = xDocSh->GetDocument();
+
+    SCTAB nTab = 0;
+    int nHeight1 = rDoc.GetRowHeight(0, nTab, false);
+    int nHeight3 = rDoc.GetRowHeight(2, nTab, false);
+
+    // We will do relative comparison, because calculated autoheight
+    // can be different on different platforms
+    CPPUNIT_ASSERT_MESSAGE("Row #3 shoud be thinner than #1", nHeight3 < 
nHeight1);
+
+    xDocSh->DoClose();
+}
+
 ScFiltersTest::ScFiltersTest()
       : ScBootstrapFixture( "sc/qa/unit/data" )
 {
commit e3a35b4e3549efd91855c64b950cf67347a879c6
Author:     Thorsten Behrens <thorsten.behr...@cib.de>
AuthorDate: Mon Feb 17 00:48:37 2020 +0100
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Mon Feb 17 00:48:37 2020 +0100

    Revert "Revert "tdf#62268: allow row height recalculation on document load""
    
    This reverts commit b238d4274e4018cc8d90bd7f8652529ce650dc03.

diff --git a/sc/qa/unit/data/ods/tdf62268.ods b/sc/qa/unit/data/ods/tdf62268.ods
new file mode 100644
index 000000000000..da88adfd25cd
Binary files /dev/null and b/sc/qa/unit/data/ods/tdf62268.ods differ
diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx
index e23886fc7033..dad65eb9d7c4 100644
--- a/sc/qa/unit/helper/qahelper.cxx
+++ b/sc/qa/unit/helper/qahelper.cxx
@@ -763,7 +763,8 @@ void ScBootstrapFixture::miscRowHeightsTest( TestParam 
const * aTestValues, unsi
                     bool bOpt = !(rDoc.GetRowFlags( nRow, nTab ) & 
CRFlags::ManualSize);
                     CPPUNIT_ASSERT_EQUAL(aTestValues[ index ].pData[ i 
].bOptimal, bOpt);
                 }
-                CPPUNIT_ASSERT_EQUAL(nExpectedHeight, nHeight);
+                // Due to some minor differences on Mac this comparison is 
made bit fuzzy
+                CPPUNIT_ASSERT_LESSEQUAL( 15, abs( nHeight - nExpectedHeight ) 
);
             }
         }
         xShell->DoClose();
diff --git a/sc/qa/unit/subsequent_export-test.cxx 
b/sc/qa/unit/subsequent_export-test.cxx
index 116222c0fb7e..22851e9b5f5f 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -1086,60 +1086,57 @@ void ScExportTest::testOutlineExportXLSX()
     // We expected that exactly 13 unique Nodes will be produced
     assertXPath(pSheet, "/x:worksheet/x:cols/x:col", 13);
 
-    // We need to save all 30 rows, as it provides information about 
outLineLevel
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "r", "1");
+    // First row is empty and default so it is not written into XML file
+    // so we need to save 29 rows, as it provides information about 
outLineLevel
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "r", "2");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "hidden", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "outlineLevel", 
"0");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "outlineLevel", 
"1");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "r", "2");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "r", "3");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "hidden", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "outlineLevel", 
"1");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "outlineLevel", 
"2");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "r", "3");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "r", "4");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "hidden", 
"false");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "outlineLevel", 
"2");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "r", "4");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "r", "5");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "hidden", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "outlineLevel", 
"2");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "outlineLevel", 
"3");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "r", "5");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "r", "6");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "hidden", 
"false");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "outlineLevel", 
"3");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "r", "6");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "hidden", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "outlineLevel", 
"3");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "r", "7");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "hidden", "true");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "outlineLevel", 
"4");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "r", "7");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "r", "8");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "hidden", "true");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "outlineLevel", 
"4");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "r", "8");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "r", "9");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "hidden", "true");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "outlineLevel", 
"4");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[9]", "r", "9");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[9]", "hidden", "true");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[9]", "outlineLevel", 
"4");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[9]", "collapsed", 
"false");
     // Next rows are the same as the previous one but it needs to bre 
preserved,
     // as they contain information about outlineLevel
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "r", "21");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "hidden", 
"true");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "outlineLevel", 
"4");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "collapsed", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "r", "22");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[20]", "r", "21");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[20]", "hidden", 
"true");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[20]", "outlineLevel", 
"4");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[20]", "collapsed", 
"false");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "r", "22");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "hidden", 
"false");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "outlineLevel", 
"3");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "collapsed", 
"true");
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "r", "23");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "hidden", 
"false");
     assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "outlineLevel", 
"3");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "collapsed", 
"true");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[23]", "r", "23");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[23]", "hidden", 
"false");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[23]", "outlineLevel", 
"3");
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[23]", "collapsed", 
"false");
-
-    // We expected that exactly 30 Row Nodes will be produced
-    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row", 30);
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "collapsed", 
"false");
+
+    // We expected that exactly 29 Row Nodes will be produced
+    assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row", 29);
 }
 
 void ScExportTest::testAllRowsHiddenXLSX()
diff --git a/sc/qa/unit/subsequent_filters-test.cxx 
b/sc/qa/unit/subsequent_filters-test.cxx
index a8e5fdec97df..c6d3bc4f644e 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -250,6 +250,9 @@ public:
     void testBorderColorsXLSXML();
     void testHiddenRowsColumnsXLSXML();
     void testColumnWidthRowHeightXLSXML();
+    void testCharacterSetXLSXML();
+    void testTdf62268();
+    void testVBAMacroFunctionODS();
 
     CPPUNIT_TEST_SUITE(ScFiltersTest);
     CPPUNIT_TEST(testBooleanFormatXLSX);
@@ -386,6 +389,8 @@ public:
     CPPUNIT_TEST(testColumnWidthRowHeightXLSXML);
     CPPUNIT_TEST(testCharacterSetXLSXML);
     CPPUNIT_TEST(testCondFormatFormulaListenerXLSX);
+    CPPUNIT_TEST(testTdf62268);
+    CPPUNIT_TEST(testVBAMacroFunctionODS);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -2777,8 +2782,8 @@ void ScFiltersTest::testMiscRowHeights()
 
     static const TestParam::RowData MultiLineOptData[] =
     {
-        // Row 0 is 12.63 mm and optimal flag is set
-        { 0, 0, 0, 1263, CHECK_OPTIMAL, true  },
+        // Row 0 is 12.63 mm, but optimal flag is set
+        { 0, 0, 0, 1236, CHECK_OPTIMAL, true  },
         // Row 1 is 11.99 mm and optimal flag is NOT set
         { 1, 1, 0, 1199, CHECK_OPTIMAL, false  },
     };
@@ -2816,8 +2821,9 @@ void ScFiltersTest::testOptimalHeightReset()
     ScDocument& rDoc = xDocSh->GetDocument();
     // open document in read/write mode ( otherwise optimal height stuff won't
     // be triggered ) *and* you can't delete cell contents.
-    int nHeight = sc::TwipsToHMM ( rDoc.GetRowHeight(nRow, nTab, false) );
-    CPPUNIT_ASSERT_EQUAL(1263, nHeight);
+    int nHeight = rDoc.GetRowHeight(nRow, nTab, false);
+    // Due to some minor differences on Mac this comparison is made bit fuzzy
+    CPPUNIT_ASSERT_LESSEQUAL( 8, abs( nHeight - 701 ) );
 
     ScDocFunc &rFunc = xDocSh->GetDocFunc();
 
@@ -4252,6 +4258,34 @@ void ScFiltersTest::testCondFormatFormulaListenerXLSX()
     xDocSh->DoClose();
 }
 
+void ScFiltersTest::testTdf62268()
+{
+    ScDocShellRef xDocSh = loadDoc("tdf62268.", FORMAT_ODS);
+    ScDocument& rDoc = xDocSh->GetDocument();
+    int nHeight;
+
+    SCTAB nTab = 0;
+    nHeight = rDoc.GetRowHeight(0, nTab, false);
+    CPPUNIT_ASSERT_LESSEQUAL( 3, abs( 256 - nHeight ) );
+    nHeight = rDoc.GetRowHeight(1, nTab, false);
+    CPPUNIT_ASSERT_LESSEQUAL( 19, abs( 1905 - nHeight ) );
+
+    xDocSh->DoClose();
+}
+
+void ScFiltersTest::testVBAMacroFunctionODS()
+{
+    ScDocShellRef xDocSh = loadDoc("vba_macro_functions.", FORMAT_ODS);
+    ScDocument& rDoc = xDocSh->GetDocument();
+
+    OUString aFunction;
+    rDoc.GetFormula(2, 0, 0, aFunction);
+    std::cout << aFunction << std::endl;
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(10.0, rDoc.GetValue(2, 0, 0), 1e-6);
+
+    xDocSh->DoClose();
+}
+
 ScFiltersTest::ScFiltersTest()
       : ScBootstrapFixture( "sc/qa/unit/data" )
 {
diff --git a/sc/source/filter/xml/xmlimprt.cxx 
b/sc/source/filter/xml/xmlimprt.cxx
index 36aed760837d..6179192b1641 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -1794,6 +1794,26 @@ void SAL_CALL ScXMLImport::endDocument()
                     pDoc->SetStreamValid( nTab, true );
             }
         }
+
+        // There are rows with optimal height which need to be updated
+        if (pDoc && !maRecalcRowRanges.empty())
+        {
+            bool bLockHeight = pDoc->IsAdjustHeightLocked();
+            if (bLockHeight)
+            {
+                pDoc->UnlockAdjustHeight();
+            }
+
+            ScSizeDeviceProvider 
aProv(static_cast<ScDocShell*>(pDoc->GetDocumentShell()));
+            ScDocRowHeightUpdater aUpdater(*pDoc, aProv.GetDevice(), 
aProv.GetPPTX(), aProv.GetPPTY(), &maRecalcRowRanges);
+            aUpdater.update();
+
+            if (bLockHeight)
+            {
+                pDoc->LockAdjustHeight();
+            }
+        }
+
         aTables.FixupOLEs();
     }
     if (GetModel().is())
diff --git a/sc/source/filter/xml/xmlimprt.hxx 
b/sc/source/filter/xml/xmlimprt.hxx
index efbdf3c35cc1..7cd7eabe70dc 100644
--- a/sc/source/filter/xml/xmlimprt.hxx
+++ b/sc/source/filter/xml/xmlimprt.hxx
@@ -264,6 +264,8 @@ class ScXMLImport: public SvXMLImport
 
     ScMyTables              aTables;
 
+    std::vector<ScDocRowHeightUpdater::TabRanges> maRecalcRowRanges;
+
     std::unique_ptr<ScMyNamedExpressions>   m_pMyNamedExpressions;
     SheetNamedExpMap m_SheetNamedExpressions;
 
@@ -336,6 +338,8 @@ public:
 
     ScMyTables& GetTables() { return aTables; }
 
+    std::vector<ScDocRowHeightUpdater::TabRanges>& GetRecalcRowRanges() { 
return maRecalcRowRanges; }
+
     bool IsStylesOnlyMode() const { return !bLoadDoc; }
 
     static sal_Int16 GetCellType(const char* rStrValue, const sal_Int32 
nStrLength);
diff --git a/sc/source/filter/xml/xmlrowi.cxx b/sc/source/filter/xml/xmlrowi.cxx
index 484cae638a75..3093c33f0a8e 100644
--- a/sc/source/filter/xml/xmlrowi.cxx
+++ b/sc/source/filter/xml/xmlrowi.cxx
@@ -199,6 +199,21 @@ void SAL_CALL 
ScXMLTableRowContext::endFastElement(sal_Int32 /*nElement*/)
                     }
                     if (bFiltered)
                         xRowProperties->setPropertyValue(SC_ISFILTERED, 
uno::makeAny(bFiltered));
+
+                    uno::Any any = 
xRowProperties->getPropertyValue(SC_UNONAME_OHEIGHT);
+                    bool bOptionalHeight = false;
+                    any >>= bOptionalHeight;
+                    if (bOptionalHeight)
+                    {
+                        // Save this row for later height update
+                        std::vector<ScDocRowHeightUpdater::TabRanges>& 
rRecalcRanges = rXMLImport.GetRecalcRowRanges();
+                        while (static_cast<SCTAB>(rRecalcRanges.size()) <= 
nSheet)
+                        {
+                            rRecalcRanges.emplace_back(0);
+                        }
+                        rRecalcRanges.at(nSheet).mnTab = nSheet;
+                        rRecalcRanges.at(nSheet).mpRanges->setTrue(nFirstRow, 
nCurrentRow);
+                    }
                 }
             }
         }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to