diff options
author | Balazs Varga <balazs.varga991@gmail.com> | 2021-05-06 18:47:30 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2022-02-23 22:36:00 +0100 |
commit | f240b1c122019250a490573663929c54dabdfa7d (patch) | |
tree | 852ce491504989ea044d477a39a59c53b1519558 /sc/source/filter | |
parent | 0052d57a880f58d290afdc1566dfddbe76d2570b (diff) |
tdf#127301 XLSX import: hide hidden named range of autofilter
Create but not insert/add hidden FILTER_CRITERIA (_xlnm._FilterDatabase)
to ScRangeName, because no need for them, so avoid of creating
extra named ranges by autofilter re-range (shown in Sheet ->
Named Ranges and Expressions -> Manage...).
See also commit 3a2263a20629b0a3e9b4935dd43dc59817d0241c
"mib17: #163146# XLS import: do not skip hidden names[...]".
Change-Id: Ibfd86942a99b251a59394955bc890e6dbe0390f3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115189
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130434
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'sc/source/filter')
-rw-r--r-- | sc/source/filter/inc/workbookhelper.hxx | 4 | ||||
-rw-r--r-- | sc/source/filter/oox/defnamesbuffer.cxx | 11 | ||||
-rw-r--r-- | sc/source/filter/oox/workbookhelper.cxx | 25 |
3 files changed, 22 insertions, 18 deletions
diff --git a/sc/source/filter/inc/workbookhelper.hxx b/sc/source/filter/inc/workbookhelper.hxx index 10733994a232..2040b59c3215 100644 --- a/sc/source/filter/inc/workbookhelper.hxx +++ b/sc/source/filter/inc/workbookhelper.hxx @@ -167,7 +167,7 @@ public: OUString& orName, const css::uno::Sequence< css::sheet::FormulaToken>& rTokens, sal_Int32 nIndex, - sal_Int32 nNameFlags ) const; + sal_Int32 nNameFlags, bool bHidden ) const; /** Creates and returns a defined name on-the-fly in the sheet. The name will not be buffered in the global defined names buffer. @@ -176,7 +176,7 @@ public: OUString& orName, const css::uno::Sequence< css::sheet::FormulaToken>& rTokens, sal_Int32 nIndex, - sal_Int32 nNameFlags, sal_Int32 nTab ) const; + sal_Int32 nNameFlags, sal_Int32 nTab, bool bHidden ) const; /** Creates and returns a database range on-the-fly in the Calc document. The range will not be buffered in the global table buffer. diff --git a/sc/source/filter/oox/defnamesbuffer.cxx b/sc/source/filter/oox/defnamesbuffer.cxx index 182be74080e1..8de4098e3016 100644 --- a/sc/source/filter/oox/defnamesbuffer.cxx +++ b/sc/source/filter/oox/defnamesbuffer.cxx @@ -225,16 +225,17 @@ void DefinedName::createNameObject( sal_Int32 nIndex ) using namespace ::com::sun::star::sheet::NamedRangeFlag; if( !isGlobalName() ) switch( mcBuiltinId ) { - case BIFF_DEFNAME_CRITERIA: nNameFlags = FILTER_CRITERIA; break; - case BIFF_DEFNAME_PRINTAREA: nNameFlags = PRINT_AREA; break; - case BIFF_DEFNAME_PRINTTITLES: nNameFlags = COLUMN_HEADER | ROW_HEADER; break; + case BIFF_DEFNAME_CRITERIA: + case BIFF_DEFNAME_FILTERDATABASE: nNameFlags = FILTER_CRITERIA; break; + case BIFF_DEFNAME_PRINTAREA: nNameFlags = PRINT_AREA; break; + case BIFF_DEFNAME_PRINTTITLES: nNameFlags = COLUMN_HEADER | ROW_HEADER; break; } // create the name and insert it into the document, maCalcName will be changed to the resulting name if (maModel.mnSheet >= 0) - mpScRangeData = createLocalNamedRangeObject( maCalcName, ApiTokenSequence(), nIndex, nNameFlags, maModel.mnSheet ); + mpScRangeData = createLocalNamedRangeObject( maCalcName, ApiTokenSequence(), nIndex, nNameFlags, maModel.mnSheet, maModel.mbHidden ); else - mpScRangeData = createNamedRangeObject( maCalcName, ApiTokenSequence(), nIndex, nNameFlags ); + mpScRangeData = createNamedRangeObject( maCalcName, ApiTokenSequence(), nIndex, nNameFlags, maModel.mbHidden ); mnTokenIndex = nIndex; } diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx index 5cfa569894f4..6c56de1e981a 100644 --- a/sc/source/filter/oox/workbookhelper.cxx +++ b/sc/source/filter/oox/workbookhelper.cxx @@ -151,9 +151,9 @@ public: /** Returns the specified cell or page style from the Calc document. */ Reference< XStyle > getStyleObject( const OUString& rStyleName, bool bPageStyle ) const; /** Creates and returns a defined name on-the-fly in the Calc document. */ - ScRangeData* createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ); + ScRangeData* createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, bool bHidden ); /** Creates and returns a defined name on the-fly in the correct Calc sheet. */ - ScRangeData* createLocalNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ); + ScRangeData* createLocalNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab, bool bHidden ); /** Creates and returns a database range on-the-fly in the Calc document. */ Reference< XDatabaseRange > createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ); /** Creates and returns an unnamed database range on-the-fly in the Calc document. */ @@ -352,7 +352,7 @@ Reference< XStyle > WorkbookGlobals::getStyleObject( const OUString& rStyleName, namespace { -ScRangeData* lcl_addNewByNameAndTokens( ScDocument& rDoc, ScRangeName* pNames, const OUString& rName, const Sequence<FormulaToken>& rTokens, sal_Int16 nIndex, sal_Int32 nUnoType ) +ScRangeData* lcl_addNewByNameAndTokens( ScDocument& rDoc, ScRangeName* pNames, const OUString& rName, const Sequence<FormulaToken>& rTokens, sal_Int16 nIndex, sal_Int32 nUnoType, bool bHidden ) { bool bDone = false; ScRangeData::Type nNewType = ScRangeData::Type::Name; @@ -366,6 +366,9 @@ ScRangeData* lcl_addNewByNameAndTokens( ScDocument& rDoc, ScRangeName* pNames, c pNew->GuessPosition(); if ( nIndex ) pNew->SetIndex( nIndex ); + // create but not insert hidden FILTER_CRITERIA named ranges to ScRangeName + if ( bHidden && nNewType == ScRangeData::Type::Criteria ) + return pNew; if ( pNames->insert(pNew) ) bDone = true; if (!bDone) @@ -386,7 +389,7 @@ OUString findUnusedName( const ScRangeName* pRangeName, const OUString& rSuggest } ScRangeData* WorkbookGlobals::createNamedRangeObject( - OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ) + OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, bool bHidden ) { // create the name and insert it into the Calc document ScRangeData* pScRangeData = nullptr; @@ -397,13 +400,13 @@ ScRangeData* WorkbookGlobals::createNamedRangeObject( // find an unused name orName = findUnusedName( pNames, orName ); // create the named range - pScRangeData = lcl_addNewByNameAndTokens( rDoc, pNames, orName, rTokens, nIndex, nNameFlags ); + pScRangeData = lcl_addNewByNameAndTokens( rDoc, pNames, orName, rTokens, nIndex, nNameFlags, bHidden ); } return pScRangeData; } ScRangeData* WorkbookGlobals::createLocalNamedRangeObject( - OUString& orName, const Sequence< FormulaToken >& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ) + OUString& orName, const Sequence< FormulaToken >& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab, bool bHidden ) { // create the name and insert it into the Calc document ScRangeData* pScRangeData = nullptr; @@ -416,7 +419,7 @@ ScRangeData* WorkbookGlobals::createLocalNamedRangeObject( // find an unused name orName = findUnusedName( pNames, orName ); // create the named range - pScRangeData = lcl_addNewByNameAndTokens( rDoc, pNames, orName, rTokens, nIndex, nNameFlags ); + pScRangeData = lcl_addNewByNameAndTokens( rDoc, pNames, orName, rTokens, nIndex, nNameFlags, bHidden ); } return pScRangeData; } @@ -862,14 +865,14 @@ Reference< XStyle > WorkbookHelper::getStyleObject( const OUString& rStyleName, return mrBookGlob.getStyleObject( rStyleName, bPageStyle ); } -ScRangeData* WorkbookHelper::createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ) const +ScRangeData* WorkbookHelper::createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, bool bHidden ) const { - return mrBookGlob.createNamedRangeObject( orName, rTokens, nIndex, nNameFlags ); + return mrBookGlob.createNamedRangeObject( orName, rTokens, nIndex, nNameFlags, bHidden ); } -ScRangeData* WorkbookHelper::createLocalNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ) const +ScRangeData* WorkbookHelper::createLocalNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab, bool bHidden ) const { - return mrBookGlob.createLocalNamedRangeObject( orName, rTokens, nIndex, nNameFlags, nTab ); + return mrBookGlob.createLocalNamedRangeObject( orName, rTokens, nIndex, nNameFlags, nTab, bHidden ); } Reference< XDatabaseRange > WorkbookHelper::createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ) const |