Rebased ref, commits from common ancestor: commit adebb43093e67544810a52a51e91e24306f71996 Author: Tamás Zolnai <zolnaitamas2...@gmail.com> Date: Sat Nov 19 21:34:16 2016 +0100
PivotMedian: ODS import / export of pivot table median Change-Id: I3b018f5a76bb3d89bcb6cbc34e4cb2f2057248d5 diff --git a/sc/qa/unit/data/ods/pivot-table-median.ods b/sc/qa/unit/data/ods/pivot-table-median.ods new file mode 100755 index 0000000..bb88170 Binary files /dev/null and b/sc/qa/unit/data/ods/pivot-table-median.ods differ diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx index dbab3cc..8d8183b 100644 --- a/sc/qa/unit/subsequent_export-test.cxx +++ b/sc/qa/unit/subsequent_export-test.cxx @@ -149,6 +149,7 @@ public: void testPivotTableXLSX(); void testPivotTableTwoDataFieldsXLSX(); + void testPivotTableMedian(); void testSwappedOutImageExport(); void testLinkedGraphicRT(); @@ -238,6 +239,7 @@ public: CPPUNIT_TEST(testSheetProtection); CPPUNIT_TEST(testPivotTableXLSX); CPPUNIT_TEST(testPivotTableTwoDataFieldsXLSX); + CPPUNIT_TEST(testPivotTableMedian); #if !defined(_WIN32) CPPUNIT_TEST(testSupBookVirtualPath); #endif @@ -2936,6 +2938,41 @@ void ScExportTest::testPivotTableTwoDataFieldsXLSX() xDocSh2->DoClose(); } +void ScExportTest::testPivotTableMedian() +{ + ScDocShellRef xDocSh = loadDoc("pivot-table-median.", FORMAT_ODS); + CPPUNIT_ASSERT_MESSAGE("Failed to load test document.", xDocSh.Is()); + + // Export the document and import again for a check + ScDocShellRef xDocSh2 = saveAndReload(xDocSh.get(), FORMAT_ODS); + xDocSh->DoClose(); + + // Check sheet + ScDocument& rDoc = xDocSh2->GetDocument(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be exactly one sheet.", sal_Int16(1), rDoc.GetTableCount()); + + // Check pivot table + ScDPCollection* pDPs = rDoc.GetDPCollection(); + CPPUNIT_ASSERT_MESSAGE("Failed to get a live ScDPCollection instance.", pDPs); + CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be one pivot table instance.", size_t(1), pDPs->GetCount()); + const ScDPObject* pDPObj = &(*pDPs)[0]; + CPPUNIT_ASSERT_MESSAGE("Failed to get pivot table object.", pDPObj); + const ScDPSaveData* pSaveData = pDPObj->GetSaveData(); + CPPUNIT_ASSERT_MESSAGE("Failed to get ScDPSaveData instance.", pSaveData); + + // Check the data field function. + std::vector<const ScDPSaveDimension*> aDims; + pSaveData->GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_DATA, aDims); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "There should be exactly 1 data field.", + std::vector<ScDPSaveDimension const *>::size_type(1), aDims.size()); + + const ScDPSaveDimension* pDim = aDims.back(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Function for the data field should be COUNT.", + sal_uInt16(sheet::GeneralFunction_MEDIAN), pDim->GetFunction()); +} + void ScExportTest::testFunctionsExcel2010ODS() { //testFunctionsExcel2010(FORMAT_ODS); diff --git a/sc/source/filter/xml/XMLConverter.cxx b/sc/source/filter/xml/XMLConverter.cxx index 5a5c529..2ea2bb6 100644 --- a/sc/source/filter/xml/XMLConverter.cxx +++ b/sc/source/filter/xml/XMLConverter.cxx @@ -56,6 +56,8 @@ sheet::GeneralFunction ScXMLConverter::GetFunctionFromString( const OUString& sF return sheet::GeneralFunction_PRODUCT; if( IsXMLToken(sFunction, XML_AVERAGE ) ) return sheet::GeneralFunction_AVERAGE; + if( IsXMLToken(sFunction, XML_MEDIAN ) ) + return sheet::GeneralFunction_MEDIAN; if( IsXMLToken(sFunction, XML_MAX ) ) return sheet::GeneralFunction_MAX; if( IsXMLToken(sFunction, XML_MIN ) ) @@ -107,6 +109,7 @@ void ScXMLConverter::GetStringFromFunction( { case sheet::GeneralFunction_AUTO: sFuncStr = GetXMLToken( XML_AUTO ); break; case sheet::GeneralFunction_AVERAGE: sFuncStr = GetXMLToken( XML_AVERAGE ); break; + case sheet::GeneralFunction_MEDIAN: sFuncStr = GetXMLToken( XML_MEDIAN ); break; case sheet::GeneralFunction_COUNT: sFuncStr = GetXMLToken( XML_COUNT ); break; case sheet::GeneralFunction_COUNTNUMS: sFuncStr = GetXMLToken( XML_COUNTNUMS ); break; case sheet::GeneralFunction_MAX: sFuncStr = GetXMLToken( XML_MAX ); break; @@ -120,7 +123,7 @@ void ScXMLConverter::GetStringFromFunction( case sheet::GeneralFunction_VARP: sFuncStr = GetXMLToken( XML_VARP ); break; default: { - // added to avoid warnings + assert(false); } } ScRangeStringConverter::AssignString( rString, sFuncStr, false ); commit 21847f84c8ff95137a53e8e7b2fd32b1851671d0 Author: Tamás Zolnai <zolnaitamas2...@gmail.com> Date: Sat Nov 19 21:33:19 2016 +0100 PivotMedian: Implement median as a new pivot table function Change-Id: Ife90c8f1c36980254de3cec6e395a6ba94d99fea diff --git a/sc/inc/dpglobal.hxx b/sc/inc/dpglobal.hxx index 7c82541..295af86 100644 --- a/sc/inc/dpglobal.hxx +++ b/sc/inc/dpglobal.hxx @@ -27,18 +27,19 @@ enum class PivotFunc { Sum = 0x0001, Count = 0x0002, Average = 0x0004, - Max = 0x0008, - Min = 0x0010, - Product = 0x0020, - CountNum = 0x0040, - StdDev = 0x0080, - StdDevP = 0x0100, - StdVar = 0x0200, - StdVarP = 0x0400, + Median = 0x0008, + Max = 0x0010, + Min = 0x0020, + Product = 0x0040, + CountNum = 0x0080, + StdDev = 0x0100, + StdDevP = 0x0200, + StdVar = 0x0400, + StdVarP = 0x0800, Auto = 0x1000 }; namespace o3tl { - template<> struct typed_flags<PivotFunc> : is_typed_flags<PivotFunc, 0x17ff> {}; + template<> struct typed_flags<PivotFunc> : is_typed_flags<PivotFunc, 0x11ff> {}; } struct ScDPValue diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx index 05efe99..65dbf5d 100644 --- a/sc/inc/dptabres.hxx +++ b/sc/inc/dptabres.hxx @@ -160,6 +160,7 @@ private: double fAux; long nCount; ScDPAggData* pChild; + std::vector<double> mSortedValues; public: ScDPAggData() : fVal(0.0), fAux(0.0), nCount(SC_DPAGG_EMPTY), pChild(nullptr) {} diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx index a94b855..429a867 100644 --- a/sc/inc/global.hxx +++ b/sc/inc/global.hxx @@ -851,7 +851,8 @@ enum ScSubTotalFunc SUBTOTAL_FUNC_SUM = 9, SUBTOTAL_FUNC_VAR = 10, SUBTOTAL_FUNC_VARP = 11, - SUBTOTAL_FUNC_SELECTION_COUNT = 12 + SUBTOTAL_FUNC_MED = 12, + SUBTOTAL_FUNC_SELECTION_COUNT = 13 }; enum ScAggregateFunc diff --git a/sc/inc/globstr.hrc b/sc/inc/globstr.hrc index 5833436..e06d921 100644 --- a/sc/inc/globstr.hrc +++ b/sc/inc/globstr.hrc @@ -149,6 +149,7 @@ #define STR_FUN_TEXT_SUM 108 #define STR_FUN_TEXT_COUNT 109 #define STR_FUN_TEXT_AVG 110 +#define STR_FUN_TEXT_MEDIAN 544 #define STR_FUN_TEXT_MAX 111 #define STR_FUN_TEXT_MIN 112 #define STR_FUN_TEXT_PRODUCT 113 @@ -709,7 +710,7 @@ #define STR_BOOLEAN_VALUE 542 #define STR_TEXT 543 -#define SC_GLOBSTR_STR_COUNT 544 /**< the count of permanently resident strings */ +#define SC_GLOBSTR_STR_COUNT 545 /**< the count of permanently resident strings */ #endif diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx index ff6c2da..7124b51 100644 --- a/sc/source/core/data/dpoutput.cxx +++ b/sc/source/core/data/dpoutput.cxx @@ -1548,6 +1548,7 @@ OUString lcl_GetDataFieldName( const OUString& rSourceName, sheet::GeneralFuncti case sheet::GeneralFunction_COUNT: case sheet::GeneralFunction_COUNTNUMS: nStrId = STR_FUN_TEXT_COUNT; break; case sheet::GeneralFunction_AVERAGE: nStrId = STR_FUN_TEXT_AVG; break; + case sheet::GeneralFunction_MEDIAN: nStrId = STR_FUN_TEXT_MEDIAN; break; case sheet::GeneralFunction_MAX: nStrId = STR_FUN_TEXT_MAX; break; case sheet::GeneralFunction_MIN: nStrId = STR_FUN_TEXT_MIN; break; case sheet::GeneralFunction_PRODUCT: nStrId = STR_FUN_TEXT_PRODUCT; break; @@ -1556,10 +1557,10 @@ OUString lcl_GetDataFieldName( const OUString& rSourceName, sheet::GeneralFuncti case sheet::GeneralFunction_VAR: case sheet::GeneralFunction_VARP: nStrId = STR_FUN_TEXT_VAR; break; case sheet::GeneralFunction_NONE: - case sheet::GeneralFunction_AUTO: + case sheet::GeneralFunction_AUTO: break; default: { - OSL_FAIL("wrong function"); + assert(false); } } if ( !nStrId ) diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx index cba41fd..b9dcdf4 100644 --- a/sc/source/core/data/dptabres.cxx +++ b/sc/source/core/data/dptabres.cxx @@ -57,7 +57,7 @@ using ::com::sun::star::uno::Sequence; namespace { -sal_uInt16 nFuncStrIds[12] = // matching enum ScSubTotalFunc +sal_uInt16 nFuncStrIds[] = // matching enum ScSubTotalFunc { 0, // SUBTOTAL_FUNC_NONE STR_FUN_TEXT_AVG, // SUBTOTAL_FUNC_AVE @@ -70,7 +70,9 @@ sal_uInt16 nFuncStrIds[12] = // matching enum ScSubTotalFunc STR_FUN_TEXT_STDDEV, // SUBTOTAL_FUNC_STDP STR_FUN_TEXT_SUM, // SUBTOTAL_FUNC_SUM STR_FUN_TEXT_VAR, // SUBTOTAL_FUNC_VAR - STR_FUN_TEXT_VAR // SUBTOTAL_FUNC_VARP + STR_FUN_TEXT_VAR, // SUBTOTAL_FUNC_VARP + 0, // SUBTOTAL_FUNC_SELECTION_COUNT - not used for pivot table + STR_FUN_TEXT_MEDIAN // SUBTOTAL_FUNC_MED }; bool lcl_SearchMember( const std::vector <ScDPResultMember *>& list, SCROW nOrder, SCROW& rIndex) @@ -439,6 +441,15 @@ void ScDPAggData::Update( const ScDPValue& rNext, ScSubTotalFunc eFunc, const Sc nCount = -1; // -1 for error } break; + case SUBTOTAL_FUNC_MED: + { + auto aIter = std::upper_bound(mSortedValues.begin(), mSortedValues.end(), rNext.mfValue); + if (aIter == mSortedValues.end()) + mSortedValues.push_back(rNext.mfValue); + else + mSortedValues.insert(aIter, rNext.mfValue); + } + break; default: OSL_FAIL("invalid function"); } @@ -475,6 +486,7 @@ void ScDPAggData::Calculate( ScSubTotalFunc eFunc, const ScDPSubTotalState& rSub break; case SUBTOTAL_FUNC_AVE: + case SUBTOTAL_FUNC_MED: case SUBTOTAL_FUNC_MAX: case SUBTOTAL_FUNC_MIN: case SUBTOTAL_FUNC_STDP: @@ -534,6 +546,16 @@ void ScDPAggData::Calculate( ScSubTotalFunc eFunc, const ScDPSubTotalState& rSub if ( nCount > 0 ) fResult = (fAux - fVal*fVal/(double)(nCount)) / (double)nCount; break; + case SUBTOTAL_FUNC_MED: + if (mSortedValues.size() > 0) + { + assert(mSortedValues.size() == static_cast<size_t>(nCount)); + if ((nCount % 2) == 1) + fResult = mSortedValues[mSortedValues.size() / 2]; + else + fResult = (mSortedValues[mSortedValues.size() / 2 - 1] + mSortedValues[mSortedValues.size() / 2]) / 2.0; + } + break; default: OSL_FAIL("invalid function"); } @@ -816,6 +838,7 @@ OUString ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSubTotal { // for user-specified subtotal function with all measures, // display only function name + assert(eForceFunc < SAL_N_ELEMENTS(nFuncStrIds)); if ( eForceFunc != SUBTOTAL_FUNC_NONE ) return ScGlobal::GetRscString(nFuncStrIds[eForceFunc]); diff --git a/sc/source/core/data/dputil.cxx b/sc/source/core/data/dputil.cxx index 93d79ed..f614d42 100644 --- a/sc/source/core/data/dputil.cxx +++ b/sc/source/core/data/dputil.cxx @@ -367,7 +367,7 @@ sal_Int32 ScDPUtil::getDatePartValue( namespace { -sal_uInt16 nFuncStrIds[12] = { +sal_uInt16 nFuncStrIds[] = { 0, // SUBTOTAL_FUNC_NONE STR_FUN_TEXT_AVG, // SUBTOTAL_FUNC_AVE STR_FUN_TEXT_COUNT, // SUBTOTAL_FUNC_CNT @@ -379,7 +379,9 @@ sal_uInt16 nFuncStrIds[12] = { STR_FUN_TEXT_STDDEV, // SUBTOTAL_FUNC_STDP STR_FUN_TEXT_SUM, // SUBTOTAL_FUNC_SUM STR_FUN_TEXT_VAR, // SUBTOTAL_FUNC_VAR - STR_FUN_TEXT_VAR // SUBTOTAL_FUNC_VARP + STR_FUN_TEXT_VAR, // SUBTOTAL_FUNC_VARP + 0, // SUBTOTAL_FUNC_SELECTION_COUNT - not used for pivot table + STR_FUN_TEXT_MEDIAN // SUBTOTAL_FUNC_MED }; } @@ -387,6 +389,7 @@ sal_uInt16 nFuncStrIds[12] = { OUString ScDPUtil::getDisplayedMeasureName(const OUString& rName, ScSubTotalFunc eFunc) { OUStringBuffer aRet; + assert(eFunc < SAL_N_ELEMENTS(nFuncStrIds)); sal_uInt16 nId = nFuncStrIds[eFunc]; if (nId) { @@ -400,13 +403,14 @@ OUString ScDPUtil::getDisplayedMeasureName(const OUString& rName, ScSubTotalFunc ScSubTotalFunc ScDPUtil::toSubTotalFunc(css::sheet::GeneralFunction eGenFunc) { - ScSubTotalFunc eSubTotal; + ScSubTotalFunc eSubTotal = SUBTOTAL_FUNC_NONE; switch (eGenFunc) { case sheet::GeneralFunction_NONE: eSubTotal = SUBTOTAL_FUNC_NONE; break; case sheet::GeneralFunction_SUM: eSubTotal = SUBTOTAL_FUNC_SUM; break; case sheet::GeneralFunction_COUNT: eSubTotal = SUBTOTAL_FUNC_CNT2; break; case sheet::GeneralFunction_AVERAGE: eSubTotal = SUBTOTAL_FUNC_AVE; break; + case sheet::GeneralFunction_MEDIAN: eSubTotal = SUBTOTAL_FUNC_MED; break; case sheet::GeneralFunction_MAX: eSubTotal = SUBTOTAL_FUNC_MAX; break; case sheet::GeneralFunction_MIN: eSubTotal = SUBTOTAL_FUNC_MIN; break; case sheet::GeneralFunction_PRODUCT: eSubTotal = SUBTOTAL_FUNC_PROD; break; @@ -415,9 +419,9 @@ ScSubTotalFunc ScDPUtil::toSubTotalFunc(css::sheet::GeneralFunction eGenFunc) case sheet::GeneralFunction_STDEVP: eSubTotal = SUBTOTAL_FUNC_STDP; break; case sheet::GeneralFunction_VAR: eSubTotal = SUBTOTAL_FUNC_VAR; break; case sheet::GeneralFunction_VARP: eSubTotal = SUBTOTAL_FUNC_VARP; break; - case sheet::GeneralFunction_AUTO: + case sheet::GeneralFunction_AUTO: eSubTotal = SUBTOTAL_FUNC_NONE; break; default: - eSubTotal = SUBTOTAL_FUNC_NONE; + assert(false); } return eSubTotal; } diff --git a/sc/source/ui/dbgui/PivotLayoutTreeListData.cxx b/sc/source/ui/dbgui/PivotLayoutTreeListData.cxx index 401fa81..8eae041 100644 --- a/sc/source/ui/dbgui/PivotLayoutTreeListData.cxx +++ b/sc/source/ui/dbgui/PivotLayoutTreeListData.cxx @@ -35,6 +35,7 @@ OUString lclGetFunctionMaskName(const PivotFunc nFunctionMask) case PivotFunc::Sum: nStrId = STR_FUN_TEXT_SUM; break; case PivotFunc::Count: nStrId = STR_FUN_TEXT_COUNT; break; case PivotFunc::Average: nStrId = STR_FUN_TEXT_AVG; break; + case PivotFunc::Median: nStrId = STR_FUN_TEXT_MEDIAN; break; case PivotFunc::Max: nStrId = STR_FUN_TEXT_MAX; break; case PivotFunc::Min: nStrId = STR_FUN_TEXT_MIN; break; case PivotFunc::Product: nStrId = STR_FUN_TEXT_PRODUCT; break; diff --git a/sc/source/ui/dbgui/pvfundlg.cxx b/sc/source/ui/dbgui/pvfundlg.cxx index d947b51..5a9ad2b 100644 --- a/sc/source/ui/dbgui/pvfundlg.cxx +++ b/sc/source/ui/dbgui/pvfundlg.cxx @@ -100,6 +100,7 @@ static const PivotFunc spnFunctions[] = PivotFunc::Sum, PivotFunc::Count, PivotFunc::Average, + PivotFunc::Median, PivotFunc::Max, PivotFunc::Min, PivotFunc::Product, @@ -189,6 +190,7 @@ void ScDPFunctionListBox::FillFunctionNames() ResStringArray aArr( ScResId( SCSTR_DPFUNCLISTBOX ) ); for( sal_uInt16 nIndex = 0, nCount = sal::static_int_cast<sal_uInt16>(aArr.Count()); nIndex < nCount; ++nIndex ) InsertEntry( aArr.GetString( nIndex ) ); + assert(GetEntryCount() == SAL_N_ELEMENTS(spnFunctions)); } ScDPFunctionDlg::ScDPFunctionDlg( diff --git a/sc/source/ui/dbgui/pvfundlg.src b/sc/source/ui/dbgui/pvfundlg.src index fe33cf8..0de9461 100644 --- a/sc/source/ui/dbgui/pvfundlg.src +++ b/sc/source/ui/dbgui/pvfundlg.src @@ -26,6 +26,7 @@ StringArray SCSTR_DPFUNCLISTBOX < "Sum" ; Default ; > ; < "Count" ; Default ; > ; < "Average" ; Default ; > ; + < "Median" ; Default ; > ; < "Max" ; Default ; > ; < "Min" ; Default ; > ; < "Product" ; Default ; > ; diff --git a/sc/source/ui/src/globstr.src b/sc/source/ui/src/globstr.src index 241254b..0827a6a 100644 --- a/sc/source/ui/src/globstr.src +++ b/sc/source/ui/src/globstr.src @@ -658,6 +658,10 @@ Resource RID_GLOBSTR { Text [ en-US ] = "Average" ; }; + String STR_FUN_TEXT_MEDIAN + { + Text [ en-US ] = "Median" ; + }; String STR_FUN_TEXT_MAX { Text [ en-US ] = "Max" ; diff --git a/sc/source/ui/unoobj/dapiuno.cxx b/sc/source/ui/unoobj/dapiuno.cxx index a6f7f58..fe2590b 100644 --- a/sc/source/ui/unoobj/dapiuno.cxx +++ b/sc/source/ui/unoobj/dapiuno.cxx @@ -184,6 +184,7 @@ GeneralFunction ScDataPilotConversion::FirstFunc( PivotFunc nBits ) if ( nBits & PivotFunc::Sum ) return GeneralFunction_SUM; if ( nBits & PivotFunc::Count ) return GeneralFunction_COUNT; if ( nBits & PivotFunc::Average ) return GeneralFunction_AVERAGE; + if ( nBits & PivotFunc::Median ) return GeneralFunction_MEDIAN; if ( nBits & PivotFunc::Max ) return GeneralFunction_MAX; if ( nBits & PivotFunc::Min ) return GeneralFunction_MIN; if ( nBits & PivotFunc::Product ) return GeneralFunction_PRODUCT; @@ -204,6 +205,7 @@ PivotFunc ScDataPilotConversion::FunctionBit( GeneralFunction eFunc ) case GeneralFunction_SUM: nRet = PivotFunc::Sum; break; case GeneralFunction_COUNT: nRet = PivotFunc::Count; break; case GeneralFunction_AVERAGE: nRet = PivotFunc::Average; break; + case GeneralFunction_MEDIAN: nRet = PivotFunc::Median; break; case GeneralFunction_MAX: nRet = PivotFunc::Max; break; case GeneralFunction_MIN: nRet = PivotFunc::Min; break; case GeneralFunction_PRODUCT: nRet = PivotFunc::Product; break; @@ -215,7 +217,7 @@ PivotFunc ScDataPilotConversion::FunctionBit( GeneralFunction eFunc ) case GeneralFunction_AUTO: nRet = PivotFunc::Auto; break; default: { - // added to avoid warnings + assert(false); } } return nRet; diff --git a/sc/source/ui/unoobj/datauno.cxx b/sc/source/ui/unoobj/datauno.cxx index 718af05..403bb6a4 100644 --- a/sc/source/ui/unoobj/datauno.cxx +++ b/sc/source/ui/unoobj/datauno.cxx @@ -144,6 +144,7 @@ sheet::GeneralFunction ScDataUnoConversion::SubTotalToGeneral( ScSubTotalFunc e case SUBTOTAL_FUNC_AVE: eGeneral = sheet::GeneralFunction_AVERAGE; break; case SUBTOTAL_FUNC_CNT: eGeneral = sheet::GeneralFunction_COUNTNUMS; break; case SUBTOTAL_FUNC_CNT2: eGeneral = sheet::GeneralFunction_COUNT; break; + case SUBTOTAL_FUNC_MED: eGeneral = sheet::GeneralFunction_MEDIAN; break; case SUBTOTAL_FUNC_MAX: eGeneral = sheet::GeneralFunction_MAX; break; case SUBTOTAL_FUNC_MIN: eGeneral = sheet::GeneralFunction_MIN; break; case SUBTOTAL_FUNC_PROD: eGeneral = sheet::GeneralFunction_PRODUCT; break; commit 45f77402cb2ce379849fb4a85af196c6c86fde0d Author: Tamás Zolnai <zolnaitamas2...@gmail.com> Date: Sat Nov 19 22:27:20 2016 +0100 [API Change] PivotMedian: Add median to pivot table function type Change-Id: I675e81b5c13832ac0ff893a6e080241e6f1c8fd5 diff --git a/offapi/com/sun/star/sheet/GeneralFunction.idl b/offapi/com/sun/star/sheet/GeneralFunction.idl index ff9615c..726ae9d 100644 --- a/offapi/com/sun/star/sheet/GeneralFunction.idl +++ b/offapi/com/sun/star/sheet/GeneralFunction.idl @@ -56,6 +56,13 @@ published enum GeneralFunction AVERAGE, + /** + * median of all numerical values is calculated. + * @since LibreOffice 5.3 + */ + MEDIAN, + + /** maximum value of all numerical values is calculated. */ MAX, diff --git a/offapi/type_reference/offapi.idl b/offapi/type_reference/offapi.idl index 1785f24..b939b24 100644 --- a/offapi/type_reference/offapi.idl +++ b/offapi/type_reference/offapi.idl @@ -11484,14 +11484,15 @@ module com { SUM = 2, COUNT = 3, AVERAGE = 4, - MAX = 5, - MIN = 6, - PRODUCT = 7, - COUNTNUMS = 8, - STDEV = 9, - STDEVP = 10, - VAR = 11, - VARP = 12 + MEDIAN = 5, + MAX = 6, + MIN = 7, + PRODUCT = 8, + COUNTNUMS = 9, + STDEV = 10, + STDEVP = 11, + VAR = 12, + VARP = 13 }; /** @deprecated */ published interface XConsolidationDescriptor { interface ::com::sun::star::uno::XInterface;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits