sc/qa/unit/uicalc/data/tdf157897_linked.ods |binary
 sc/qa/unit/uicalc/data/tdf157897_main.ods   |binary
 sc/qa/unit/uicalc/uicalc.cxx                |   18 ++++++++++++++++++
 sc/source/core/data/documen2.cxx            |    2 ++
 4 files changed, 20 insertions(+)

New commits:
commit 96b91357fb93028d35d70bdb52b4bac3ecbfbf57
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Mon Oct 23 23:13:51 2023 +0200
Commit:     Andreas Heinisch <andreas.heini...@yahoo.de>
CommitDate: Thu Oct 26 18:41:49 2023 +0200

    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>

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 4259f56a7777..15795baceaa1 100644
--- a/sc/qa/unit/uicalc/uicalc.cxx
+++ b/sc/qa/unit/uicalc/uicalc.cxx
@@ -1395,6 +1395,24 @@ 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);
+    pDoc->GetDocumentShell()->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 4b07b0d33ff5..c53dc6b3e305 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -1040,6 +1040,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++)
             {

Reply via email to