From 73a6735652dc5bbb4ac51743f41bbed3fe5d1060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Fri, 10 Oct 2025 15:25:20 +0900 Subject: [PATCH] sc: Don't save the sheet view holder table to the ODF, OOXML file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Tested-by: Jenkins CollaboraOffice Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192365 Reviewed-by: Tomaž Vajngerl Tested-by: Jenkins --- 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(-) 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()); + + 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()); + + 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(nTable)) && !pDoc->GetChangeTrack())