sc/inc/document.hxx                                 |    5 +--
 sc/inc/table.hxx                                    |    8 ++---
 sc/qa/unit/tiledrendering/SheetViewTest.cxx         |   32 ++++++++++++++++++++
 sc/source/core/data/document10.cxx                  |   19 +++--------
 sc/source/filter/excel/xelink.cxx                   |    2 -
 sc/source/filter/xml/xmlexprt.cxx                   |    3 +
 sc/source/ui/docshell/SheetViewOperationsTester.cxx |    2 -
 sc/source/ui/view/viewfun3.cxx                      |    4 +-
 sc/source/ui/view/viewfunc.cxx                      |    4 +-
 9 files changed, 53 insertions(+), 26 deletions(-)

New commits:
commit 73a6735652dc5bbb4ac51743f41bbed3fe5d1060
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Fri Oct 10 15:25:20 2025 +0900
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Tue Oct 14 14:40:47 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]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192365
    Reviewed-by: Tomaž Vajngerl <[email protected]>
    Tested-by: Jenkins

diff --git a/sc/qa/unit/tiledrendering/SheetViewTest.cxx 
b/sc/qa/unit/tiledrendering/SheetViewTest.cxx
index e4c61008fd97..761099707dfd 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 fe9612053400..f0f8c22e4e05 100644
--- a/sc/source/filter/excel/xelink.cxx
+++ b/sc/source/filter/excel/xelink.cxx
@@ -659,7 +659,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 314f85bd6d23..2223e9257e3a 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -1915,6 +1915,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())
commit 43b63465a65434d22eb15ee234a7bbec1faf0143
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Fri Oct 10 15:21:31 2025 +0900
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Tue Oct 14 14:40:39 2025 +0200

    sc: rename IsSheetView to IsSheetViewHolder
    
    To make it more clear what is being refered - IsSheetViewHolder
    is a sheet / table that holds the data for a sheet view, but the
    table should never be used directly.
    
    Change-Id: I8fe1d252b37389660ba4f010229fa60b2ef29da3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192145
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>
    (cherry picked from commit a819480a30237ce27b2bce6d3522b147a1354dcd)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192364
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <[email protected]>

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index f8a8e4f8340c..721492ea6893 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -2404,8 +2404,9 @@ public:
 
     bool HasSheetViews(SCTAB nTab) const;
     SC_DLLPUBLIC std::shared_ptr<sc::SheetViewManager> 
GetSheetViewManager(SCTAB nTable);
-    bool IsSheetView(SCTAB nTab) const;
-    void SetSheetView(SCTAB nTab, bool bSheetView);
+
+    /** Is a holder of the sheet view data */
+    SC_DLLPUBLIC bool IsSheetViewHolder(SCTAB nTab) const;
 
 private:
     ScDocument(const ScDocument& r) = delete;
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index ad8ff3abef90..9fb488eaaa81 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -253,7 +253,7 @@ private:
     bool            mbForceBreaks:1;
     bool            mbTotalsRowBelow:1;
 
-    bool mbIsSheetView : 1 = false;
+    bool mbIsSheetViewHolder : 1 = false;
 
     /** this is touched from formula group threading context */
     std::atomic<bool> bStreamValid;
@@ -1189,11 +1189,11 @@ public:
 
     std::shared_ptr<sc::SheetViewManager> const& GetSheetViewManager() const;
 
-    bool IsSheetView() const { return mbIsSheetView; }
+    bool IsSheetViewHolder() const { return mbIsSheetViewHolder; }
 
-    void SetSheetView(bool bValue)
+    void SetSheetViewHolder(bool bValue)
     {
-        mbIsSheetView = bValue;
+        mbIsSheetViewHolder = bValue;
     }
 
 private:
diff --git a/sc/source/core/data/document10.cxx 
b/sc/source/core/data/document10.cxx
index e5fe3010f353..0331427d6b0c 100644
--- a/sc/source/core/data/document10.cxx
+++ b/sc/source/core/data/document10.cxx
@@ -1131,24 +1131,15 @@ sc::BroadcasterState ScDocument::GetBroadcasterState() 
const
     return aState;
 }
 
-bool ScDocument::IsSheetView(SCTAB nTab) const
+bool ScDocument::IsSheetViewHolder(SCTAB nTab) const
 {
     if (ScTable const* pTable = FetchTable(nTab))
     {
-        return pTable->IsSheetView();
+        return pTable->IsSheetViewHolder();
     }
     return false;
 }
 
-void ScDocument::SetSheetView(SCTAB nTab, bool bSheetView)
-{
-    if (ScTable* pTable = FetchTable(nTab))
-    {
-        pTable->SetSheetView(bSheetView);
-    }
-}
-
-
 std::pair<sc::SheetViewID, SCTAB> ScDocument::CreateNewSheetView(SCTAB nTab)
 {
     if (ScTable* pTable = FetchTable(nTab))
@@ -1160,7 +1151,7 @@ std::pair<sc::SheetViewID, SCTAB> 
ScDocument::CreateNewSheetView(SCTAB nTab)
             {
                 auto nSheetViewID = 
pTable->GetSheetViewManager()->create(pSheetViewTable);
                 pSheetViewTable->SetVisible(false);
-                pSheetViewTable->SetSheetView(true);
+                pSheetViewTable->SetSheetViewHolder(true);
                 return { nSheetViewID, nSheetViewTab };
             }
         }
@@ -1181,7 +1172,7 @@ std::shared_ptr<sc::SheetViewManager> 
ScDocument::GetSheetViewManager(SCTAB nTab
 {
     if (ScTable* pTable = FetchTable(nTable))
     {
-        if (!pTable->IsSheetView())
+        if (!pTable->IsSheetViewHolder())
             return pTable->GetSheetViewManager();
     }
     return {};
@@ -1191,7 +1182,7 @@ SCTAB ScDocument::GetSheetViewNumber(SCTAB nTab, 
sc::SheetViewID nID)
 {
     if (ScTable* pMainSheet = FetchTable(nTab))
     {
-        if (pMainSheet->IsSheetView() || nID == sc::DefaultSheetViewID)
+        if (pMainSheet->IsSheetViewHolder() || nID == sc::DefaultSheetViewID)
             return nTab;
 
         std::shared_ptr<sc::SheetView> pView = 
pMainSheet->GetSheetViewManager()->get(nID);
diff --git a/sc/source/ui/docshell/SheetViewOperationsTester.cxx 
b/sc/source/ui/docshell/SheetViewOperationsTester.cxx
index 94dc4154118d..6b5469159173 100644
--- a/sc/source/ui/docshell/SheetViewOperationsTester.cxx
+++ b/sc/source/ui/docshell/SheetViewOperationsTester.cxx
@@ -142,7 +142,7 @@ bool SheetViewOperationsTester::check(Operation eOperation) 
const
     SCTAB nTab = mpViewData->GetTabNumber();
 
     // Never allow direct changes to the data holder sheet of the sheet view.
-    if (rDocument.IsSheetView(nTab))
+    if (rDocument.IsSheetViewHolder(nTab))
         return false;
 
     sc::SheetViewID nSheetViewID = mpViewData->GetSheetViewID();
diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx
index 7889ffc6989a..30f443a93441 100644
--- a/sc/source/ui/view/viewfun3.cxx
+++ b/sc/source/ui/view/viewfun3.cxx
@@ -2097,7 +2097,7 @@ void ScViewFunc::RemoveCurrentSheetView()
 
     ScDocument& rDocument = GetViewData().GetDocument();
     SCTAB nTab = GetViewData().GetTabNumber();
-    if (rDocument.IsSheetView(nTab))
+    if (rDocument.IsSheetViewHolder(nTab))
         return;
 
     auto pSheetManager = rDocument.GetSheetViewManager(nTab);
@@ -2136,7 +2136,7 @@ void ScViewFunc::SelectSheetView(sc::SheetViewID 
nSelectSheetViewID)
 {
     SCTAB nTab = GetViewData().GetTabNumber();
 
-    if (GetViewData().GetDocument().IsSheetView(nTab))
+    if (GetViewData().GetDocument().IsSheetViewHolder(nTab))
         return;
 
     sc::SheetViewID nSheetViewID = GetViewData().GetSheetViewID();
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index 0088b890f213..5bbec50f0eb8 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -812,7 +812,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB 
nTab,
 
         applyFormulaToCell(*this, nCol, nRow, nTab, rString, pData, 
xModificator, aMark, bMatrixExpand, bRecord, bNumFmtChanged);
 
-        if (!rDoc.IsSheetView(nSelectedTab))
+        if (!rDoc.IsSheetViewHolder(nSelectedTab))
         {
             auto pManager = rDoc.GetSheetViewManager(nSelectedTab);
 
@@ -838,7 +838,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB 
nTab,
     {
         for (const auto& rTab : aMark)
         {
-            if (!rDoc.IsSheetView(rTab))
+            if (!rDoc.IsSheetViewHolder(rTab))
             {
                 auto pManager = rDoc.GetSheetViewManager(rTab);
                 for (auto const& pSheetView : pManager->getSheetViews())

Reply via email to