sc/qa/unit/tiledrendering/SheetViewTest.cxx |   32 ++++++++++++++++++++++++++++
 sc/source/filter/excel/xelink.cxx           |    2 -
 sc/source/filter/xml/xmlexprt.cxx           |    3 ++
 3 files changed, 36 insertions(+), 1 deletion(-)

New commits:
commit 69e01fab878499dbba295dce1f8abb57e855da70
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Fri Oct 10 15:25:20 2025 +0900
Commit:     Miklos Vajna <[email protected]>
CommitDate: Fri Oct 10 16:22:53 2025 +0200

    sc: Don't save the sheet view holder table to the ODF, OOXML file
    
    Sheet view holder table is temporary and shouldn't be saved to the
    document file.
    This also includes a test, which checks if the ODF, OOXML files
    have the sheet view holder table saved.
    
    Change-Id: Iaf93b7723be7b10d7c10f829db7079a92deb1a8b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192146
    Reviewed-by: Miklos Vajna <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/sc/qa/unit/tiledrendering/SheetViewTest.cxx 
b/sc/qa/unit/tiledrendering/SheetViewTest.cxx
index 8548b11e5e9f..988c0f6f519a 100644
--- a/sc/qa/unit/tiledrendering/SheetViewTest.cxx
+++ b/sc/qa/unit/tiledrendering/SheetViewTest.cxx
@@ -478,6 +478,38 @@ CPPUNIT_TEST_FIXTURE(SheetViewTest, testSheetViewManager)
     CPPUNIT_ASSERT_EQUAL(sc::InvalidSheetViewID, 
maSheetViewManager.getPreviousSheetView(-99));
 }
 
+CPPUNIT_TEST_FIXTURE(SheetViewTest, testCheckIfSheetViewIsSavedInDocument_ODF)
+{
+    // Check if sheet view holder table is saved into the ODF document
+    ScModelObj* pModelObj = createDoc("SheetView_AutoFilter.ods");
+    
pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+
+    dispatchCommand(mxComponent, u".uno:NewSheetView"_ustr, {});
+    Scheduler::ProcessEventsToIdle();
+
+    save(u"calc8"_ustr);
+
+    xmlDocUniquePtr pXmlDoc = parseExport(u"content.xml"_ustr);
+    CPPUNIT_ASSERT(pXmlDoc);
+    assertXPath(pXmlDoc, "//table:table", 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SheetViewTest, 
testCheckIfSheetViewIsSavedInDocument_OOXML)
+{
+    // Check if sheet view holder table is saved into the OOXML document
+    ScModelObj* pModelObj = createDoc("SheetView_AutoFilter.ods");
+    
pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+
+    dispatchCommand(mxComponent, u".uno:NewSheetView"_ustr, {});
+    Scheduler::ProcessEventsToIdle();
+
+    save(u"Calc Office Open XML"_ustr);
+
+    xmlDocUniquePtr pXmlDoc = parseExport(u"xl/workbook.xml"_ustr);
+    CPPUNIT_ASSERT(pXmlDoc);
+    assertXPath(pXmlDoc, "/x:workbook/x:sheets/x:sheet", 1);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/excel/xelink.cxx 
b/sc/source/filter/excel/xelink.cxx
index 4374b0bc3ef7..b28d70828b85 100644
--- a/sc/source/filter/excel/xelink.cxx
+++ b/sc/source/filter/excel/xelink.cxx
@@ -661,7 +661,7 @@ XclExpTabInfo::XclExpTabInfo( const XclExpRoot& rRoot ) :
     for( nScTab = 0; nScTab < mnScCnt; ++nScTab )
     {
         // ignored sheets (skipped by export, with invalid Excel sheet index)
-        if( rDoc.IsScenario( nScTab ) )
+        if (rDoc.IsScenario(nScTab) || rDoc.IsSheetViewHolder(nScTab))
         {
             SetFlag( nScTab, ExcTabBufFlags::Ignore );
         }
diff --git a/sc/source/filter/xml/xmlexprt.cxx 
b/sc/source/filter/xml/xmlexprt.cxx
index 1c381f450d49..13335c589f52 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -1922,6 +1922,9 @@ void ScXMLExport::ExportContent_()
         WriteTheLabelRanges(*pDoc, xSpreadDoc);
         for (sal_Int32 nTable = 0; nTable < nTableCount; ++nTable)
         {
+            // We need to skip tables that hold the data for a sheet view
+            if (pDoc->IsSheetViewHolder(nTable))
+                continue;
             sal_Int64 nStartOffset = -1;
             sal_Int64 nEndOffset = -1;
             if (pSheetData && pDoc->IsStreamValid(static_cast<SCTAB>(nTable)) 
&& !pDoc->GetChangeTrack())

Reply via email to