[Libreoffice-commits] core.git: Branch 'feature/pivot-table-result-tree' - sc/source
Kohei Yoshida
kohei.yoshida at gmail.com
Thu Apr 18 20:10:58 PDT 2013
sc/source/core/tool/interpr2.cxx | 80 ++++++++++++++++++++++++---------------
1 file changed, 50 insertions(+), 30 deletions(-)
New commits:
commit b49fe02ba4882cc4672bea12c77d8ffa9a9a40f0
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Thu Apr 18 23:10:49 2013 -0400
Handle the old syntax for GETPIVOTDATA.
The old syntax is Calc only (not Excel), and is specified in ODF 1.2.
Change-Id: I9551d408ae136d3567375e905b1273103a8f616a
diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx
index 463b0c5..c0e699b 100644
--- a/sc/source/core/tool/interpr2.cxx
+++ b/sc/source/core/tool/interpr2.cxx
@@ -3097,42 +3097,64 @@ void ScInterpreter::ScGetPivotData()
bOldSyntax = true;
}
+ std::vector<sheet::DataPilotFieldFilter> aFilters;
+ OUString aDataFieldName;
+ ScRange aBlock;
+
if (bOldSyntax)
{
- // TODO: I'll handle this later.
- PushError(errNoRef);
- return;
- }
+ aDataFieldName = GetString();
- // Standard syntax: separate name/value pairs
+ switch (GetStackType())
+ {
+ case svDoubleRef :
+ PopDoubleRef(aBlock);
+ break;
+ case svSingleRef :
+ {
+ ScAddress aAddr;
+ PopSingleRef(aAddr);
+ aBlock = aAddr;
+ }
+ break;
+ default:
+ PushError(errNoRef);
+ return;
+ }
+ }
+ else
+ {
+ // Standard syntax: separate name/value pairs
- sal_uInt16 nFilterCount = nParamCount / 2 - 1;
- std::vector<sheet::DataPilotFieldFilter> aFilters(nFilterCount);
+ sal_uInt16 nFilterCount = nParamCount / 2 - 1;
+ aFilters.resize(nFilterCount);
- sal_uInt16 i = nFilterCount;
- while (i-- > 0)
- {
- //! should allow numeric constraint values
- aFilters[i].MatchValue = GetString();
- aFilters[i].FieldName = GetString();
- }
+ sal_uInt16 i = nFilterCount;
+ while (i-- > 0)
+ {
+ //! should allow numeric constraint values
+ aFilters[i].MatchValue = GetString();
+ aFilters[i].FieldName = GetString();
+ }
- ScRange aBlock;
- switch (GetStackType())
- {
- case svDoubleRef :
- PopDoubleRef(aBlock);
- break;
- case svSingleRef :
+ switch (GetStackType())
{
- ScAddress aAddr;
- PopSingleRef(aAddr);
- aBlock = aAddr;
+ case svDoubleRef :
+ PopDoubleRef(aBlock);
+ break;
+ case svSingleRef :
+ {
+ ScAddress aAddr;
+ PopSingleRef(aAddr);
+ aBlock = aAddr;
+ }
+ break;
+ default:
+ PushError(errNoRef);
+ return;
}
- break;
- default:
- PushError(errNoRef);
- return;
+
+ aDataFieldName = GetString(); // First parameter is data field name.
}
// NOTE : MS Excel docs claim to use the 'most recent' which is not
@@ -3145,8 +3167,6 @@ void ScInterpreter::ScGetPivotData()
return;
}
- OUString aDataFieldName = GetString(); // First parameter is data field name.
-
double fVal = pDPObj->GetPivotData(aDataFieldName, aFilters);
if (rtl::math::isNan(fVal))
{
More information about the Libreoffice-commits
mailing list