sc/qa/unit/data/ods/value-in-column-2000.ods   |binary
 sc/qa/unit/data/xlsx/value-in-column-2000.xlsx |binary
 sc/qa/unit/jumbosheets-test.cxx                |   47 +++++++++++++++++++++++++
 sc/source/filter/excel/xetable.cxx             |    2 -
 4 files changed, 48 insertions(+), 1 deletion(-)

New commits:
commit ff8e1199b338df5f28b200d417947c96fc919b12
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Fri Feb 11 16:38:58 2022 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Fri Feb 11 18:34:06 2022 +0100

    basic import/export test for ods/xlsx with a value in column 2000
    
    Which is above the "normal" 1024 column limit. This tests my recent
    commits.
    
    Change-Id: I8ec3fcdbfef879ca0eeec4cfa3fa067378f6f57f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129823
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/sc/qa/unit/data/ods/value-in-column-2000.ods 
b/sc/qa/unit/data/ods/value-in-column-2000.ods
new file mode 100644
index 000000000000..2dd898c2dffc
Binary files /dev/null and b/sc/qa/unit/data/ods/value-in-column-2000.ods differ
diff --git a/sc/qa/unit/data/xlsx/value-in-column-2000.xlsx 
b/sc/qa/unit/data/xlsx/value-in-column-2000.xlsx
new file mode 100644
index 000000000000..08f58be655c7
Binary files /dev/null and b/sc/qa/unit/data/xlsx/value-in-column-2000.xlsx 
differ
diff --git a/sc/qa/unit/jumbosheets-test.cxx b/sc/qa/unit/jumbosheets-test.cxx
index 9432f90192d8..27a0b396b996 100644
--- a/sc/qa/unit/jumbosheets-test.cxx
+++ b/sc/qa/unit/jumbosheets-test.cxx
@@ -41,17 +41,22 @@ public:
     virtual void setUp() override;
     virtual void tearDown() override;
 
+    void testRoundtripColumn2000Ods();
+    void testRoundtripColumn2000Xlsx();
     void testTdf134392();
     void testTdf133033();
 
     CPPUNIT_TEST_SUITE(ScJumboSheetSTest);
 
+    CPPUNIT_TEST(testRoundtripColumn2000Ods);
+    CPPUNIT_TEST(testRoundtripColumn2000Xlsx);
     CPPUNIT_TEST(testTdf134392);
     CPPUNIT_TEST(testTdf133033);
 
     CPPUNIT_TEST_SUITE_END();
 
 private:
+    void testRoundtripColumn2000(std::u16string_view name, int format);
     uno::Reference<uno::XInterface> m_xCalcComponent;
 };
 
@@ -68,6 +73,48 @@ bool ScJumboSheetSTest::load(const OUString& rFilter, const 
OUString& rURL,
     return bLoaded;
 }
 
+void ScJumboSheetSTest::testRoundtripColumn2000Ods()
+{
+    testRoundtripColumn2000(u"value-in-column-2000.", FORMAT_ODS);
+}
+
+void ScJumboSheetSTest::testRoundtripColumn2000Xlsx()
+{
+    testRoundtripColumn2000(u"value-in-column-2000.", FORMAT_XLSX);
+}
+
+void ScJumboSheetSTest::testRoundtripColumn2000(std::u16string_view name, int 
format)
+{
+    ScDocShellRef xDocSh1 = loadDoc(name, format);
+    CPPUNIT_ASSERT(xDocSh1.is());
+
+    {
+        ScDocument& rDoc = xDocSh1->GetDocument();
+        // Check the value at BXX1 (2000th column).
+        CPPUNIT_ASSERT_EQUAL(-5.0, rDoc.GetValue(1999, 0, 0));
+        // Check the formula referencing the value.
+        CPPUNIT_ASSERT_EQUAL(OUString("=BXX1"), rDoc.GetFormula(0, 0, 0));
+        // Recalc and check value in the reference.
+        rDoc.CalcAll();
+        CPPUNIT_ASSERT_EQUAL(-5.0, rDoc.GetValue(0, 0, 0));
+    }
+
+    ScDocShellRef xDocSh2 = saveAndReload(&(*xDocSh1), format);
+    CPPUNIT_ASSERT(xDocSh2.is());
+
+    {
+        // Check again.
+        ScDocument& rDoc = xDocSh2->GetDocument();
+        CPPUNIT_ASSERT_EQUAL(-5.0, rDoc.GetValue(1999, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(OUString("=BXX1"), rDoc.GetFormula(0, 0, 0));
+        rDoc.CalcAll();
+        CPPUNIT_ASSERT_EQUAL(-5.0, rDoc.GetValue(0, 0, 0));
+    }
+
+    xDocSh1->DoClose();
+    xDocSh2->DoClose();
+}
+
 void ScJumboSheetSTest::testTdf134392()
 {
     // Without the fix in place, the file would have crashed
diff --git a/sc/source/filter/excel/xetable.cxx 
b/sc/source/filter/excel/xetable.cxx
index bc64867a9f8a..140c973a30b5 100644
--- a/sc/source/filter/excel/xetable.cxx
+++ b/sc/source/filter/excel/xetable.cxx
@@ -1245,7 +1245,7 @@ void XclExpMultiCellBase::AppendXFId( const 
XclExpMultiXFId& rXFId )
     if( maXFIds.empty() || (maXFIds.back().mnXFId != rXFId.mnXFId) )
         maXFIds.push_back( rXFId );
     else
-        maXFIds.back().mnCount = maXFIds.back().mnCount + rXFId.mnCount;
+        maXFIds.back().mnCount += rXFId.mnCount;
 }
 
 void XclExpMultiCellBase::AppendXFId( const XclExpRoot& rRoot,

Reply via email to