From 02ca891a8edaf17a80f3e6a4f8181d6df7950325 Mon Sep 17 00:00:00 2001 From: DrRobotto Date: Fri, 11 Sep 2026 00:27:37 +0200 Subject: [PATCH] tdf#122945 - Set tab color directly to avoid sheet protection preventing import Change-Id: I716bf2e09f9f07380499c0dbd9cfe85e19c3e047 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210644 Tested-by: Jenkins Reviewed-by: Andreas Heinisch --- .../tdf122945_TabColorProtectedSheet.xlsx | Bin 0 -> 8545 bytes sc/qa/unit/subsequent_filters_test2.cxx | 26 ++++++++++++++++++ sc/source/filter/oox/worksheetsettings.cxx | 3 +- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 sc/qa/unit/data/xlsx/tdf122945_TabColorProtectedSheet.xlsx diff --git a/sc/qa/unit/data/xlsx/tdf122945_TabColorProtectedSheet.xlsx b/sc/qa/unit/data/xlsx/tdf122945_TabColorProtectedSheet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..09558ae597108cbcdde1f13bc5b38687247b3f9a GIT binary patch literal 8545 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 literal 0 HcmV?d00001 diff --git a/sc/qa/unit/subsequent_filters_test2.cxx b/sc/qa/unit/subsequent_filters_test2.cxx index bfee79ae8332..139708add9ef 100644 --- a/sc/qa/unit/subsequent_filters_test2.cxx +++ b/sc/qa/unit/subsequent_filters_test2.cxx @@ -1814,6 +1814,32 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testTdf66377) CPPUNIT_ASSERT_EQUAL(Color(COL_TRANSPARENT), rColor);*/ } +CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testTdf122945TabColorProtectedSheet) +{ + createScDoc("xlsx/tdf122945_TabColorProtectedSheet.xlsx"); + + ScDocument* pDoc = getScDoc(); + CPPUNIT_ASSERT(pDoc->IsTabProtected(0)); + + // Without the fix in place, this test would have failed with + // - Expected: rgba[ff0000ff] (RED) + // - Actual : rgba[ffffff00] (COL_AUTO) + // i.e. the sheet protection prevented the import of the tab color + CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), pDoc->GetTabBgColor(0)); + + saveAndReload(TestFilter::XLSX); + + // check that the tab color was exported correctly + xmlDocUniquePtr pSheet = parseExport(u"xl/worksheets/sheet1.xml"_ustr); + CPPUNIT_ASSERT(pSheet); + assertXPath(pSheet, "/x:worksheet/x:sheetPr/x:tabColor", "rgb", u"FFFF0000"); + + // check that sheet protection and tab color are still present after save and reload + pDoc = getScDoc(); + CPPUNIT_ASSERT(pDoc->IsTabProtected(0)); + CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), pDoc->GetTabBgColor(0)); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/oox/worksheetsettings.cxx b/sc/source/filter/oox/worksheetsettings.cxx index ab079b2bface..d23c81f19ca3 100644 --- a/sc/source/filter/oox/worksheetsettings.cxx +++ b/sc/source/filter/oox/worksheetsettings.cxx @@ -286,7 +286,8 @@ void WorksheetSettings::finalizeImport() if( !maSheetSettings.maTabColor.isAuto() ) { ::Color nColor = maSheetSettings.maTabColor.getColor( getBaseFilter().getGraphicHelper() ); - xSheet->setPropertyValue( u"TabColor"_ustr, Any(nColor) ); + // tdf#122945 - set the color directly to avoid sheet protection preventing the import + getScDocument().SetTabBgColor(getSheetIndex(), nColor); } // Summary data below or above the contents