diff options
author | Rafael Lima <rafael.palma.lima@gmail.com> | 2023-08-14 00:34:43 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2023-10-01 13:01:32 +0200 |
commit | 8938bc703980e3bdf4a32863f3e0193302a08cde (patch) | |
tree | 48ea2e72a2cf6e30e37e9667e071ba09249f09d5 /sc/source/ui/unoobj | |
parent | eb68c77168db379d9d805a221a30581962040afb (diff) |
tdf#154449 Add support for hidden named ranges
This patch adds the possibility of having "hidden" named ranges in Calc, in a way similar to what MS Excel has (i.e. they're not visible in the UI and can only be hidden/shown via scripting).
This is done by creating a new HIDDEN flag in com.sun.star.sheet.NamedRangeFlag.
Hence thia patch makes it so that named ranges can be made hidden/visible via scripting. For instance, consider a Calc document with a named range "NamedRange1". The following scripts hides "NamedRange1" from the UI (i.e. it's no longer visible in the Manage Names dialog):
Sub SetHidden
Dim eFlags : eFlags = com.sun.star.sheet.NamedRangeFlag
aNamedRange = ThisComponent.NamedRanges.getByName("NamedRange1")
nType = aNamedRange.getType() Or eFlags.HIDDEN
aNamedRange.setType(nType)
End Sub
To make the named range visible again:
Sub RemoveHidden
Dim eFlags : eFlags = com.sun.star.sheet.NamedRangeFlag
aNamedRange = ThisComponent.NamedRanges.getByName("NamedRange1")
nType = aNamedRange.getType()
nType = nType - (aNamedRange.getType() And eFlags.HIDDEN)
aNamedRange.setType(nType)
End Sub
This patch also implements ODS and OOX import/export, as well as QA tests.
Change-Id: I10efe46938fe772b87dc17fc597cb83648b5efb2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155599
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sc/source/ui/unoobj')
-rw-r--r-- | sc/source/ui/unoobj/nameuno.cxx | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sc/source/ui/unoobj/nameuno.cxx b/sc/source/ui/unoobj/nameuno.cxx index 84283b1ede14..6e02ab723b62 100644 --- a/sc/source/ui/unoobj/nameuno.cxx +++ b/sc/source/ui/unoobj/nameuno.cxx @@ -75,10 +75,11 @@ SC_SIMPLE_SERVICE_INFO( ScLabelRangeObj, "ScLabelRangeObj", "com.sun.star.sheet. SC_SIMPLE_SERVICE_INFO( ScLabelRangesObj, "ScLabelRangesObj", "com.sun.star.sheet.LabelRanges" ) SC_SIMPLE_SERVICE_INFO( ScNamedRangesObj, "ScNamedRangesObj", "com.sun.star.sheet.NamedRanges" ) +// Database named ranges are not considered by getCount, hasByName, removeByName and getElementNames +// Note that hidden named ranges are considered by these methods static bool lcl_UserVisibleName(const ScRangeData& rData) { //! as method to ScRangeData - return !rData.HasType(ScRangeData::Type::Database); } @@ -293,6 +294,7 @@ sal_Int32 SAL_CALL ScNamedRangeObj::getType() if ( pData->HasType(ScRangeData::Type::PrintArea) ) nType |= sheet::NamedRangeFlag::PRINT_AREA; if ( pData->HasType(ScRangeData::Type::ColHeader) ) nType |= sheet::NamedRangeFlag::COLUMN_HEADER; if ( pData->HasType(ScRangeData::Type::RowHeader) ) nType |= sheet::NamedRangeFlag::ROW_HEADER; + if ( pData->HasType(ScRangeData::Type::Hidden) ) nType |= sheet::NamedRangeFlag::HIDDEN; } return nType; } @@ -305,6 +307,7 @@ void SAL_CALL ScNamedRangeObj::setType( sal_Int32 nUnoType ) if ( nUnoType & sheet::NamedRangeFlag::PRINT_AREA ) nNewType |= ScRangeData::Type::PrintArea; if ( nUnoType & sheet::NamedRangeFlag::COLUMN_HEADER ) nNewType |= ScRangeData::Type::ColHeader; if ( nUnoType & sheet::NamedRangeFlag::ROW_HEADER ) nNewType |= ScRangeData::Type::RowHeader; + if ( nUnoType & sheet::NamedRangeFlag::HIDDEN ) nNewType |= ScRangeData::Type::Hidden; // GRAM_API for API compatibility. Modify_Impl( nullptr, nullptr, nullptr, nullptr, &nNewType,formula::FormulaGrammar::GRAM_API ); @@ -458,6 +461,7 @@ void SAL_CALL ScNamedRangesObj::addNewByName( const OUString& aName, if ( nUnoType & sheet::NamedRangeFlag::PRINT_AREA ) nNewType |= ScRangeData::Type::PrintArea; if ( nUnoType & sheet::NamedRangeFlag::COLUMN_HEADER ) nNewType |= ScRangeData::Type::ColHeader; if ( nUnoType & sheet::NamedRangeFlag::ROW_HEADER ) nNewType |= ScRangeData::Type::RowHeader; + if ( nUnoType & sheet::NamedRangeFlag::HIDDEN ) nNewType |= ScRangeData::Type::Hidden; bool bDone = false; if (pDocShell) |