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())
