diff options
author | Julien Nabet <serval2412@yahoo.fr> | 2018-07-26 11:36:08 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2018-09-03 14:39:15 +0200 |
commit | 73af06a6a7fcb2d92d36a45bbe54395bcba8dfb0 (patch) | |
tree | 30e3119c92e973135f40f402ca8963e4bc69a28b /sc/source/core/data | |
parent | 6c21fb251ba6bb2455c947583709262deddf5e4a (diff) |
tdf#37268: use also sheet local range in Pivot
There are 2 types of range names:
- those global to the document
- those specific to a sheet
Before this patch, Pivot could only see global range names
There are 2 parts on the patch:
1) ScCellShell::ExecuteDataPilotDialog()
Retrieve all the range names and use:
- for sheets range names: <scope>.<range name>
- for global range names: <range name>
2) ScSheetSourceDesc::GetSourceRange()
Search about the presence of . to know if it's a global or sheet
name range
Change-Id: I92ac321e1475516cce7ee42b6e6038c231d0514b
Reviewed-on: https://gerrit.libreoffice.org/58070
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'sc/source/core/data')
-rw-r--r-- | sc/source/core/data/dpshttab.cxx | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/sc/source/core/data/dpshttab.cxx b/sc/source/core/data/dpshttab.cxx index fd50d2dfca9d..54efc6b9e5ae 100644 --- a/sc/source/core/data/dpshttab.cxx +++ b/sc/source/core/data/dpshttab.cxx @@ -234,13 +234,39 @@ const ScRange& ScSheetSourceDesc::GetSourceRange() const { // Obtain the source range from the range name first. maSourceRange = ScRange(); + + // Range names referring a sheet contain a . + // See comment of ScCellShell::ExecuteDataPilotDialog + // paragraph "Populate named ranges" + sal_Int32 nAfterSheetName = ScGlobal::FindUnquoted( maRangeName, '.'); + + // let's consider the range name is global to the doc by default ScRangeName* pRangeName = mpDoc->GetRangeName(); + OUString searchRangeName(maRangeName); + + // the range name concerns a specificsheet + if (nAfterSheetName != -1) + { + OUString sheetName = maRangeName.copy(0, nAfterSheetName); + ScGlobal::EraseQuotes( sheetName, '\'', false); + searchRangeName = maRangeName.copy(nAfterSheetName+1); + + SCTAB nTab = 0; + if (!mpDoc->GetTable(sheetName, nTab)) + { + // the sheetname should exist + assert(false); + return maSourceRange; + } + pRangeName = mpDoc->GetRangeName(nTab); + } + do { if (!pRangeName) break; - OUString aUpper = ScGlobal::pCharClass->uppercase(maRangeName); + OUString aUpper = ScGlobal::pCharClass->uppercase(searchRangeName); const ScRangeData* pData = pRangeName->findByUpperName(aUpper); if (!pData) break; |