sc/qa/unit/uicalc/data/tdf157897_linked.ods |binary sc/qa/unit/uicalc/data/tdf157897_main.ods |binary sc/qa/unit/uicalc/uicalc.cxx | 19 +++++++++++++++++++ sc/source/core/data/documen2.cxx | 2 ++ 4 files changed, 21 insertions(+)
New commits: commit e61f8a36220d6e8800dd0decf2a680db97c371c9 Author: Andreas Heinisch <andreas.heini...@yahoo.de> AuthorDate: Mon Oct 23 23:13:51 2023 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Thu Nov 2 00:51:24 2023 +0100 tdf#157897 - Clear print ranges before adding additional ones Otherwise, additional print ranges will be added for linked files after the external link will be updated. Change-Id: I0556fda6609d3e18f1ca992dc6a0399be01bc841 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158365 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de> (cherry picked from commit 96b91357fb93028d35d70bdb52b4bac3ecbfbf57) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158534 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/qa/unit/uicalc/data/tdf157897_linked.ods b/sc/qa/unit/uicalc/data/tdf157897_linked.ods new file mode 100755 index 000000000000..bb75c31d82ae Binary files /dev/null and b/sc/qa/unit/uicalc/data/tdf157897_linked.ods differ diff --git a/sc/qa/unit/uicalc/data/tdf157897_main.ods b/sc/qa/unit/uicalc/data/tdf157897_main.ods new file mode 100755 index 000000000000..1e1af575145f Binary files /dev/null and b/sc/qa/unit/uicalc/data/tdf157897_main.ods differ diff --git a/sc/qa/unit/uicalc/uicalc.cxx b/sc/qa/unit/uicalc/uicalc.cxx index d96b78b87136..a2b96bfda52c 100644 --- a/sc/qa/unit/uicalc/uicalc.cxx +++ b/sc/qa/unit/uicalc/uicalc.cxx @@ -1380,6 +1380,25 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf146994) CPPUNIT_ASSERT_EQUAL(OUString("Sheet1.D3:Sheet1.D4"), aMarkedAreaString); } +CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf157897_duplicated_print_ranges) +{ + createScDoc("tdf157897_main.ods"); + ScDocument* pDoc = getScDoc(); + + const sal_uInt16 nPos = 0; + const SCTAB nFirstTab = 0; + // Ensure that there exists a print range in the first documents tab + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(1), pDoc->GetPrintRangeCount(nFirstTab)); + + // Reload all links and check if the print range was not duplicated + const auto initialPrintRange = pDoc->GetPrintRange(nFirstTab, nPos); + ScDocShell* pDocSh = getScDocShell(); + pDocSh->ReloadAllLinks(); + + // Without the fix in place, the print range in the linked tab will be duplicated + CPPUNIT_ASSERT_EQUAL(initialPrintRange, pDoc->GetPrintRange(nFirstTab, nPos)); +} + CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf154991) { createScDoc("tdf154991.ods"); diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index e5d5df5a94cb..7766d54aba99 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -1042,6 +1042,8 @@ sal_uLong ScDocument::TransferTab( ScDocument& rSrcDoc, SCTAB nSrcPos, maTabs[nDestPos]->SetPrintEntireSheet(); else { + // tdf#157897 - clear print ranges before adding additional ones + maTabs[nDestPos]->ClearPrintRanges(); const auto nPrintRangeCount = rSrcDoc.maTabs[nSrcPos]->GetPrintRangeCount(); for (auto nPos = 0; nPos < nPrintRangeCount; nPos++) {