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,