summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--offapi/com/sun/star/sheet/NamedRangeFlag.idl7
-rw-r--r--sc/inc/rangenam.hxx7
-rw-r--r--sc/qa/unit/data/ods/named-ranges-hidden.odsbin0 -> 15848 bytes
-rw-r--r--sc/qa/unit/data/xlsx/named-ranges-hidden.xlsxbin0 -> 8959 bytes
-rw-r--r--sc/qa/unit/subsequent_filters_test.cxx64
-rw-r--r--sc/source/core/tool/rangenam.cxx1
-rw-r--r--sc/source/filter/excel/xename.cxx6
-rw-r--r--sc/source/filter/inc/workbookhelper.hxx4
-rw-r--r--sc/source/filter/oox/defnamesbuffer.cxx22
-rw-r--r--sc/source/filter/oox/workbookhelper.cxx26
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx6
-rw-r--r--sc/source/filter/xml/xmlimprt.cxx4
-rw-r--r--sc/source/ui/namedlg/namemgrtable.cxx4
-rw-r--r--sc/source/ui/unoobj/nameuno.cxx6
-rw-r--r--schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng34
15 files changed, 166 insertions, 25 deletions
diff --git a/offapi/com/sun/star/sheet/NamedRangeFlag.idl b/offapi/com/sun/star/sheet/NamedRangeFlag.idl
index 3c42431cb992..5addc08ad561 100644
--- a/offapi/com/sun/star/sheet/NamedRangeFlag.idl
+++ b/offapi/com/sun/star/sheet/NamedRangeFlag.idl
@@ -45,6 +45,13 @@ published constants NamedRangeFlag
*/
const long ROW_HEADER = 8;
+
+ /** The range is hidden from the user interface
+
+ @since LibreOffice 24.2
+ */
+ const long HIDDEN = 16;
+
};
diff --git a/sc/inc/rangenam.hxx b/sc/inc/rangenam.hxx
index 31bdd1f5a23c..881a2e876bda 100644
--- a/sc/inc/rangenam.hxx
+++ b/sc/inc/rangenam.hxx
@@ -55,7 +55,8 @@ public:
RowHeader = 0x0010,
AbsArea = 0x0020,
RefArea = 0x0040,
- AbsPos = 0x0080
+ AbsPos = 0x0080,
+ Hidden = 0x0100
};
enum class IsNameValidType
@@ -124,7 +125,7 @@ public:
void AddType( Type nType );
Type GetType() const { return eType; }
bool HasType( Type nType ) const;
- sal_uInt32 GetUnoType() const;
+ SC_DLLPUBLIC sal_uInt32 GetUnoType() const;
SC_DLLPUBLIC OUString GetSymbol( const formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_DEFAULT ) const;
SC_DLLPUBLIC OUString GetSymbol( const ScAddress& rPos, const formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_DEFAULT ) const;
void UpdateSymbol( OUStringBuffer& rBuffer, const ScAddress& );
@@ -166,7 +167,7 @@ public:
};
namespace o3tl
{
- template<> struct typed_flags<ScRangeData::Type> : is_typed_flags<ScRangeData::Type, 0xff> {};
+ template<> struct typed_flags<ScRangeData::Type> : is_typed_flags<ScRangeData::Type, 0x1ff> {};
}
diff --git a/sc/qa/unit/data/ods/named-ranges-hidden.ods b/sc/qa/unit/data/ods/named-ranges-hidden.ods
new file mode 100644
index 000000000000..ff68f549f06a
--- /dev/null
+++ b/sc/qa/unit/data/ods/named-ranges-hidden.ods
Binary files differ
diff --git a/sc/qa/unit/data/xlsx/named-ranges-hidden.xlsx b/sc/qa/unit/data/xlsx/named-ranges-hidden.xlsx
new file mode 100644
index 000000000000..bfb365943ee1
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/named-ranges-hidden.xlsx
Binary files differ
diff --git a/sc/qa/unit/subsequent_filters_test.cxx b/sc/qa/unit/subsequent_filters_test.cxx
index d02ebc075e3e..19563674501e 100644
--- a/sc/qa/unit/subsequent_filters_test.cxx
+++ b/sc/qa/unit/subsequent_filters_test.cxx
@@ -26,6 +26,7 @@
#include <postit.hxx>
#include <undomanager.hxx>
+#include <com/sun/star/sheet/NamedRangeFlag.hdl>
#include "helper/qahelper.hxx"
#include "helper/shared_test_impl.hxx"
@@ -640,6 +641,69 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest, testRangeNameODS)
testFile(aCSVPath, *pDoc, 1);
}
+CPPUNIT_TEST_FIXTURE(ScFiltersTest, testHiddenRangeNameODS)
+{
+ createScDoc("ods/named-ranges-hidden.ods");
+ ScDocument* pDoc = getScDoc();
+
+ // This named range is set to "hidden"
+ ScRangeData* pRangeData1 = pDoc->GetRangeName()->findByUpperName(OUString("NAMEDRANGE1"));
+ CPPUNIT_ASSERT(pRangeData1);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(sheet::NamedRangeFlag::HIDDEN),
+ pRangeData1->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+ // This named range is visible
+ ScRangeData* pRangeData2 = pDoc->GetRangeName()->findByUpperName(OUString("NAMEDRANGE2"));
+ CPPUNIT_ASSERT(pRangeData2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(0),
+ pRangeData2->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+
+ // Set NamedRange2 to hidden
+ pRangeData2->AddType(ScRangeData::Type::Hidden);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(sheet::NamedRangeFlag::HIDDEN),
+ pRangeData2->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+
+ // Check if both named ranges are hidden after saving and reloading
+ saveAndReload("calc8");
+ pDoc = getScDoc();
+ pRangeData1 = pDoc->GetRangeName()->findByUpperName(OUString("NAMEDRANGE1"));
+ CPPUNIT_ASSERT(pRangeData1);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(sheet::NamedRangeFlag::HIDDEN),
+ pRangeData1->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+ pRangeData2 = pDoc->GetRangeName()->findByUpperName(OUString("NAMEDRANGE2"));
+ CPPUNIT_ASSERT(pRangeData2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(sheet::NamedRangeFlag::HIDDEN),
+ pRangeData2->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+}
+
+CPPUNIT_TEST_FIXTURE(ScFiltersTest, testHiddenRangeNameXLSX)
+{
+ createScDoc("xlsx/named-ranges-hidden.xlsx");
+ ScDocument* pDoc = getScDoc();
+
+ // This named range is set to "hidden"
+ ScRangeData* pRangeData1 = pDoc->GetRangeName()->findByUpperName(OUString("NAMEDRANGE1"));
+ CPPUNIT_ASSERT(pRangeData1);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(sheet::NamedRangeFlag::HIDDEN),
+ pRangeData1->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+ // This named range is visible
+ ScRangeData* pRangeData2 = pDoc->GetRangeName()->findByUpperName(OUString("NAMEDRANGE2"));
+ CPPUNIT_ASSERT(pRangeData2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(0),
+ pRangeData2->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+
+ // Save as ODS and test if the named ranges are still with the correct hidden flag
+ saveAndReload("calc8");
+ pDoc = getScDoc();
+ pRangeData1 = pDoc->GetRangeName()->findByUpperName(OUString("NAMEDRANGE1"));
+ CPPUNIT_ASSERT(pRangeData1);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(sheet::NamedRangeFlag::HIDDEN),
+ pRangeData1->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+ pRangeData2 = pDoc->GetRangeName()->findByUpperName(OUString("NAMEDRANGE2"));
+ CPPUNIT_ASSERT(pRangeData2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(0),
+ pRangeData2->GetUnoType() & sheet::NamedRangeFlag::HIDDEN);
+}
+
CPPUNIT_TEST_FIXTURE(ScFiltersTest, testHyperlinksXLSX)
{
createScDoc("xlsx/hyperlinks.xlsx");
diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx
index b5578ca26590..051b0a5e77ac 100644
--- a/sc/source/core/tool/rangenam.cxx
+++ b/sc/source/core/tool/rangenam.cxx
@@ -529,6 +529,7 @@ sal_uInt32 ScRangeData::GetUnoType() const
if ( HasType(Type::PrintArea) ) nUnoType |= css::sheet::NamedRangeFlag::PRINT_AREA;
if ( HasType(Type::ColHeader) ) nUnoType |= css::sheet::NamedRangeFlag::COLUMN_HEADER;
if ( HasType(Type::RowHeader) ) nUnoType |= css::sheet::NamedRangeFlag::ROW_HEADER;
+ if ( HasType(Type::Hidden) ) nUnoType |= css::sheet::NamedRangeFlag::HIDDEN;
return nUnoType;
}
diff --git a/sc/source/filter/excel/xename.cxx b/sc/source/filter/excel/xename.cxx
index 5ce4a2ff18c4..bdb23c6cf93a 100644
--- a/sc/source/filter/excel/xename.cxx
+++ b/sc/source/filter/excel/xename.cxx
@@ -35,8 +35,10 @@
#include <formula/grammar.hxx>
#include <oox/export/utils.hxx>
#include <oox/token/tokens.hxx>
+#include <com/sun/star/sheet/NamedRangeFlag.hdl>
using namespace ::oox;
+using namespace ::com::sun::star;
// *** Helper classes ***
@@ -630,6 +632,10 @@ sal_uInt16 XclExpNameManagerImpl::CreateName( SCTAB nTab, const ScRangeData& rRa
NamedExpMap::key_type key(nTab, rRangeData.GetName());
maNamedExpMap[key] = nNameIdx;
+ // Check if it is a hidden named range
+ if ((rRangeData.GetUnoType() & sheet::NamedRangeFlag::HIDDEN) == sheet::NamedRangeFlag::HIDDEN)
+ xName->SetHidden(true);
+
/* Create the definition formula.
This may cause recursive creation of other defined names. */
if( const ScTokenArray* pScTokArr = const_cast< ScRangeData& >( rRangeData ).GetCode() )
diff --git a/sc/source/filter/inc/workbookhelper.hxx b/sc/source/filter/inc/workbookhelper.hxx
index 8e2aa221241a..fd6343a31a79 100644
--- a/sc/source/filter/inc/workbookhelper.hxx
+++ b/sc/source/filter/inc/workbookhelper.hxx
@@ -219,7 +219,7 @@ public:
RangeDataRet createNamedRangeObject(
OUString& orName,
sal_Int32 nIndex,
- sal_Int32 nNameFlags, bool bHidden ) const;
+ sal_Int32 nNameFlags ) 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.
@@ -227,7 +227,7 @@ public:
RangeDataRet createLocalNamedRangeObject(
OUString& orName,
sal_Int32 nIndex,
- sal_Int32 nNameFlags, sal_Int32 nTab, bool bHidden ) const;
+ sal_Int32 nNameFlags, sal_Int32 nTab ) 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 e79b56211105..7b64ec696b34 100644
--- a/sc/source/filter/oox/defnamesbuffer.cxx
+++ b/sc/source/filter/oox/defnamesbuffer.cxx
@@ -223,20 +223,30 @@ void DefinedName::createNameObject( sal_Int32 nIndex )
// special flags for this name
sal_Int32 nNameFlags = 0;
- using namespace ::com::sun::star::sheet::NamedRangeFlag;
+ using namespace ::com::sun::star::sheet;
if( !isGlobalName() ) switch( mcBuiltinId )
{
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;
+ case BIFF_DEFNAME_FILTERDATABASE:
+ nNameFlags = NamedRangeFlag::FILTER_CRITERIA;
+ break;
+ case BIFF_DEFNAME_PRINTAREA:
+ nNameFlags = NamedRangeFlag::PRINT_AREA;
+ break;
+ case BIFF_DEFNAME_PRINTTITLES:
+ nNameFlags = NamedRangeFlag::COLUMN_HEADER | NamedRangeFlag::ROW_HEADER;
+ break;
}
+ // Set the appropriate flag if it is a hidden named range
+ if (maModel.mbHidden)
+ nNameFlags |= NamedRangeFlag::HIDDEN;
+
// create the name and insert it into the document, maCalcName will be changed to the resulting name
if (maModel.mnSheet >= 0)
- maScRangeData = createLocalNamedRangeObject(maCalcName, nIndex, nNameFlags, maModel.mnSheet, maModel.mbHidden);
+ maScRangeData = createLocalNamedRangeObject(maCalcName, nIndex, nNameFlags, maModel.mnSheet);
else
- maScRangeData = createNamedRangeObject( maCalcName, nIndex, nNameFlags, maModel.mbHidden);
+ maScRangeData = createNamedRangeObject( maCalcName, nIndex, nNameFlags);
mnTokenIndex = nIndex;
}
diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx
index eaeca2d09912..91166cb9c478 100644
--- a/sc/source/filter/oox/workbookhelper.cxx
+++ b/sc/source/filter/oox/workbookhelper.cxx
@@ -155,9 +155,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. */
- WorkbookHelper::RangeDataRet createNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, bool bHidden);
+ WorkbookHelper::RangeDataRet createNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags);
/** Creates and returns a defined name on the-fly in the correct Calc sheet. */
- WorkbookHelper::RangeDataRet createLocalNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab, bool bHidden);
+ WorkbookHelper::RangeDataRet createLocalNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab);
/** 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. */
@@ -367,7 +367,7 @@ Reference< XStyle > WorkbookGlobals::getStyleObject( const OUString& rStyleName,
namespace {
-WorkbookHelper::RangeDataRet lcl_addNewByName(ScDocument& rDoc, ScRangeName* pNames, const OUString& rName, sal_Int16 nIndex, sal_Int32 nUnoType, bool bHidden)
+WorkbookHelper::RangeDataRet lcl_addNewByName(ScDocument& rDoc, ScRangeName* pNames, const OUString& rName, sal_Int16 nIndex, sal_Int32 nUnoType)
{
bool bDone = false;
ScRangeData::Type nNewType = ScRangeData::Type::Name;
@@ -375,13 +375,15 @@ WorkbookHelper::RangeDataRet lcl_addNewByName(ScDocument& rDoc, ScRangeName* pNa
if ( nUnoType & NamedRangeFlag::PRINT_AREA ) nNewType |= ScRangeData::Type::PrintArea;
if ( nUnoType & NamedRangeFlag::COLUMN_HEADER ) nNewType |= ScRangeData::Type::ColHeader;
if ( nUnoType & NamedRangeFlag::ROW_HEADER ) nNewType |= ScRangeData::Type::RowHeader;
+ if ( nUnoType & NamedRangeFlag::HIDDEN ) nNewType |= ScRangeData::Type::Hidden;
ScTokenArray aTokenArray(rDoc);
ScRangeData* pNew = new ScRangeData(rDoc, rName, aTokenArray, ScAddress(), nNewType);
pNew->GuessPosition();
if ( nIndex )
pNew->SetIndex( nIndex );
// create but not insert hidden FILTER_CRITERIA named ranges to ScRangeName
- if ( bHidden && nNewType == ScRangeData::Type::Criteria )
+ if (((nUnoType & NamedRangeFlag::HIDDEN) == NamedRangeFlag::HIDDEN)
+ && ((nUnoType & NamedRangeFlag::FILTER_CRITERIA) == NamedRangeFlag::FILTER_CRITERIA))
{
return WorkbookHelper::RangeDataRet(pNew, true);
}
@@ -408,7 +410,7 @@ OUString findUnusedName( const ScRangeName* pRangeName, const OUString& rSuggest
}
WorkbookHelper::RangeDataRet WorkbookGlobals::createNamedRangeObject(
- OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, bool bHidden)
+ OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags)
{
// create the name and insert it into the Calc document
WorkbookHelper::RangeDataRet aScRangeData(nullptr, false);
@@ -419,13 +421,13 @@ WorkbookHelper::RangeDataRet WorkbookGlobals::createNamedRangeObject(
// find an unused name
orName = findUnusedName( pNames, orName );
// create the named range
- aScRangeData = lcl_addNewByName(rDoc, pNames, orName, nIndex, nNameFlags, bHidden);
+ aScRangeData = lcl_addNewByName(rDoc, pNames, orName, nIndex, nNameFlags);
}
return aScRangeData;
}
WorkbookHelper::RangeDataRet WorkbookGlobals::createLocalNamedRangeObject(
- OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab, bool bHidden)
+ OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab)
{
// create the name and insert it into the Calc document
WorkbookHelper::RangeDataRet aScRangeData(nullptr, false);
@@ -438,7 +440,7 @@ WorkbookHelper::RangeDataRet WorkbookGlobals::createLocalNamedRangeObject(
// find an unused name
orName = findUnusedName( pNames, orName );
// create the named range
- aScRangeData = lcl_addNewByName(rDoc, pNames, orName, nIndex, nNameFlags, bHidden);
+ aScRangeData = lcl_addNewByName(rDoc, pNames, orName, nIndex, nNameFlags);
}
return aScRangeData;
}
@@ -896,14 +898,14 @@ Reference< XStyle > WorkbookHelper::getStyleObject( const OUString& rStyleName,
return mrBookGlob.getStyleObject( rStyleName, bPageStyle );
}
-WorkbookHelper::RangeDataRet WorkbookHelper::createNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, bool bHidden) const
+WorkbookHelper::RangeDataRet WorkbookHelper::createNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags) const
{
- return mrBookGlob.createNamedRangeObject(orName, nIndex, nNameFlags, bHidden);
+ return mrBookGlob.createNamedRangeObject(orName, nIndex, nNameFlags);
}
-WorkbookHelper::RangeDataRet WorkbookHelper::createLocalNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab, bool bHidden) const
+WorkbookHelper::RangeDataRet WorkbookHelper::createLocalNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab) const
{
- return mrBookGlob.createLocalNamedRangeObject(orName, nIndex, nNameFlags, nTab, bHidden);
+ return mrBookGlob.createLocalNamedRangeObject(orName, nIndex, nNameFlags, nTab);
}
Reference< XDatabaseRange > WorkbookHelper::createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ) const
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index 65a94257cbc9..2ac992a20930 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -4549,6 +4549,12 @@ void ScXMLExport::WriteNamedRange(ScRangeName* pRangeName)
sBufferRangeType.append(" ");
sBufferRangeType.append(GetXMLToken(XML_PRINT_RANGE));
}
+ if ((nRangeType & sheet::NamedRangeFlag::HIDDEN) == sheet::NamedRangeFlag::HIDDEN)
+ {
+ if (!sBufferRangeType.isEmpty())
+ sBufferRangeType.append(" ");
+ sBufferRangeType.append(GetXMLToken(XML_HIDDEN));
+ }
OUString sRangeType = sBufferRangeType.makeStringAndClear();
if (!sRangeType.isEmpty())
AddAttribute(XML_NAMESPACE_TABLE, XML_RANGE_USABLE_AS, sRangeType);
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index 3aa681b10bdc..78473c76b6a9 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -106,6 +106,7 @@ constexpr OUStringLiteral SC_CURRENCYSYMBOL = u"CurrencySymbol";
constexpr OUStringLiteral SC_REPEAT_ROW = u"repeat-row";
constexpr OUStringLiteral SC_FILTER = u"filter";
constexpr OUStringLiteral SC_PRINT_RANGE = u"print-range";
+constexpr OUStringLiteral SC_HIDDEN = u"hidden";
using namespace com::sun::star;
using namespace ::xmloff::token;
@@ -1202,6 +1203,8 @@ sal_Int32 ScXMLImport::GetRangeType(std::u16string_view sRangeType)
nRangeType |= sheet::NamedRangeFlag::FILTER_CRITERIA;
else if (sTemp == SC_PRINT_RANGE)
nRangeType |= sheet::NamedRangeFlag::PRINT_AREA;
+ else if (sTemp == SC_HIDDEN)
+ nRangeType |= sheet::NamedRangeFlag::HIDDEN;
}
else if (i < sRangeType.size())
sBuffer.append(sRangeType[i]);
@@ -1275,6 +1278,7 @@ public:
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;
// Insert a new name.
ScAddress aPos;
diff --git a/sc/source/ui/namedlg/namemgrtable.cxx b/sc/source/ui/namedlg/namemgrtable.cxx
index fbf6b64d3a1f..c2dbc19e721c 100644
--- a/sc/source/ui/namedlg/namemgrtable.cxx
+++ b/sc/source/ui/namedlg/namemgrtable.cxx
@@ -152,7 +152,9 @@ void ScRangeManagerTable::Init()
aLine.aScope = itr.first;
for (const auto& rEntry : rLocalRangeName)
{
- if (!rEntry.second->HasType(ScRangeData::Type::Database))
+ // Database and hidden named ranges are not shown in the Manage Names dialog
+ if (!rEntry.second->HasType(ScRangeData::Type::Database)
+ && !rEntry.second->HasType(ScRangeData::Type::Hidden))
{
aLine.aName = rEntry.second->GetName();
addEntry(aLine, false);
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)
diff --git a/schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng b/schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng
index 0f71070ea983..6b52ab7307df 100644
--- a/schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng
+++ b/schema/libreoffice/OpenDocument-v1.3+libreoffice-schema.rng
@@ -2061,6 +2061,40 @@ xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.
</rng:element>
</rng:define>
+ <!-- Adds hidden option to named ranges -->
+ <rng:define name="table-named-range-attlist">
+ <rng:attribute name="table:name">
+ <rng:ref name="string"/>
+ </rng:attribute>
+ <rng:attribute name="table:cell-range-address">
+ <rng:ref name="cellRangeAddress"/>
+ </rng:attribute>
+ <rng:optional>
+ <rng:attribute name="table:base-cell-address">
+ <rng:ref name="cellAddress"/>
+ </rng:attribute>
+ </rng:optional>
+ <rng:optional>
+ <rng:attribute name="table:range-usable-as">
+ <rng:choice>
+ <rng:value>none</rng:value>
+ <rng:list>
+ <rng:oneOrMore>
+ <rng:choice>
+ <rng:value>print-range</rng:value>
+ <rng:value>filter</rng:value>
+ <rng:value>repeat-row</rng:value>
+ <rng:value>repeat-column</rng:value>
+ <!-- The option "hidden" is the new value for "range-usable-as" -->
+ <rng:value>hidden</rng:value>
+ </rng:choice>
+ </rng:oneOrMore>
+ </rng:list>
+ </rng:choice>
+ </rng:attribute>
+ </rng:optional>
+ </rng:define>
+
</rng:include>
<!-- TODO no proposal -->