This is an automated email from the ASF dual-hosted git repository. jimjag pushed a commit to branch openformula in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit af5fcaaef322de2cb6cc40dc96ceeee1b4ca222d Author: Jim Jagielski <[email protected]> AuthorDate: Fri Nov 13 09:30:38 2026 -0500 sc, oox: use _xlfn.IFNA and _xlfn.SKEW.P in the xls and xlsx filters xls export wrote them as _xlfnodf. names, and xlsx cells using either spelling loaded as #NAME?. Prefixed COUNTIFS and BAHTTEXT load now too. --- main/oox/source/xls/formulabase.cxx | 12 +++++++++--- main/sc/source/filter/excel/xlformula.cxx | 8 +++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/main/oox/source/xls/formulabase.cxx b/main/oox/source/xls/formulabase.cxx index 12b30e528a..a62fa66e25 100644 --- a/main/oox/source/xls/formulabase.cxx +++ b/main/oox/source/xls/formulabase.cxx @@ -727,7 +727,9 @@ static const FunctionData saFuncTableOox[] = { "COUNTIFS", "COUNTIFS", 481, NOID, 2, MX, V, { RO, VR }, FUNCFLAG_MACROCALL | FUNCFLAG_PARAMPAIRS }, { "SUMIFS", "SUMIFS", 482, NOID, 3, MX, V, { RO, RO, VR }, FUNCFLAG_MACROCALL | FUNCFLAG_PARAMPAIRS }, { "AVERAGEIF", "AVERAGEIF", 483, NOID, 2, 3, V, { RO, VR, RO }, FUNCFLAG_MACROCALL }, - { "AVERAGEIFS", "AVERAGEIFS", 484, NOID, 3, MX, V, { RO, RO, VR }, FUNCFLAG_MACROCALL | FUNCFLAG_PARAMPAIRS } + { "AVERAGEIFS", "AVERAGEIFS", 484, NOID, 3, MX, V, { RO, RO, VR }, FUNCFLAG_MACROCALL | FUNCFLAG_PARAMPAIRS }, + { "IFNA", "IFNA", NOID, NOID, 2, 2, V, { VR, RO }, FUNCFLAG_MACROCALL }, + { "SKEWP", "SKEW.P", NOID, NOID, 1, MX, V, { RX }, FUNCFLAG_MACROCALL } }; /** Functions defined by OpenFormula, but not supported by Calc or by Excel. */ @@ -751,7 +753,6 @@ static const FunctionData saFuncTableOdf[] = { "FORMULA", 0, NOID, NOID, 1, 1, V, { RO }, FUNCFLAG_MACROCALLODF }, { "GAMMA", 0, NOID, NOID, 1, 1, V, { VR }, FUNCFLAG_MACROCALLODF }, { "GAUSS", 0, NOID, NOID, 1, 1, V, { VR }, FUNCFLAG_MACROCALLODF }, - { "IFNA", 0, NOID, NOID, 2, 2, V, { VR, RO }, FUNCFLAG_MACROCALLODF }, { "ISFORMULA", 0, NOID, NOID, 1, 1, V, { RO }, FUNCFLAG_MACROCALLODF }, { "ISOWEEKNUM", 0, NOID, NOID, 1, 2, V, { VR }, FUNCFLAG_MACROCALLODF }, { "MUNIT", 0, NOID, NOID, 1, 1, A, { VR }, FUNCFLAG_MACROCALLODF }, @@ -762,7 +763,6 @@ static const FunctionData saFuncTableOdf[] = { "RRI", 0, NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALLODF }, { "SHEET", 0, NOID, NOID, 0, 1, V, { RO }, FUNCFLAG_MACROCALLODF }, { "SHEETS", 0, NOID, NOID, 0, 1, V, { RO }, FUNCFLAG_MACROCALLODF }, - { "SKEWP", 0, NOID, NOID, 1, MX, V, { RX }, FUNCFLAG_MACROCALLODF }, { "UNICHAR", 0, NOID, NOID, 1, 1, V, { VR }, FUNCFLAG_MACROCALLODF }, { "UNICODE", 0, NOID, NOID, 1, 1, V, { VR }, FUNCFLAG_MACROCALLODF }, { "XOR", 0, NOID, NOID, 1, MX, V, { RX }, FUNCFLAG_MACROCALLODF } @@ -1243,6 +1243,12 @@ bool OpCodeProviderImpl::initFuncOpCode( FunctionInfo& orFuncInfo, const ApiToke aEntry.Name = orFuncInfo.maOoxFuncName; aEntry.Token = aIt->second; maParserMap.push_back( aEntry ); + // cell formulas spell macro call functions with the prefix + if( orFuncInfo.maBiffMacroName.getLength() > 0 ) + { + aEntry.Name = orFuncInfo.maBiffMacroName; + maParserMap.push_back( aEntry ); + } } } else diff --git a/main/sc/source/filter/excel/xlformula.cxx b/main/sc/source/filter/excel/xlformula.cxx index a354b9f891..a988a93892 100644 --- a/main/sc/source/filter/excel/xlformula.cxx +++ b/main/sc/source/filter/excel/xlformula.cxx @@ -373,7 +373,11 @@ static const XclFunctionInfo saFuncTable_Oox[] = { ocAverageIf, NOID, 2, 3, V, { RO, VR, RO }, EXC_FUNCFLAG_IMPORTONLY, EXC_FUNCNAME( "AVERAGEIF" ) }, { ocAverageIf, 255, 3, 4, V, { RO_E, RO, VR, RO }, EXC_FUNCFLAG_EXPORTONLY, EXC_FUNCNAME( "AVERAGEIF" ) }, { ocAverageIfs, NOID, 3, MX, V, { RO, RO, VR }, EXC_FUNCFLAG_IMPORTONLY|EXC_FUNCFLAG_PARAMPAIRS, EXC_FUNCNAME( "AVERAGEIFS" ) }, - { ocAverageIfs, 255, 4, MX, V, { RO_E, RO, RO, VR }, EXC_FUNCFLAG_EXPORTONLY|EXC_FUNCFLAG_PARAMPAIRS, EXC_FUNCNAME( "AVERAGEIFS" ) } + { ocAverageIfs, 255, 4, MX, V, { RO_E, RO, RO, VR }, EXC_FUNCFLAG_EXPORTONLY|EXC_FUNCFLAG_PARAMPAIRS, EXC_FUNCNAME( "AVERAGEIFS" ) }, + { ocIfna, NOID, 2, 2, V, { VR }, EXC_FUNCFLAG_IMPORTONLY, EXC_FUNCNAME( "IFNA" ) }, + { ocIfna, 255, 3, 3, V, { RO_E, RO }, EXC_FUNCFLAG_EXPORTONLY, EXC_FUNCNAME( "IFNA" ) }, + { ocSkewP, NOID, 1, MX, V, { VR }, EXC_FUNCFLAG_IMPORTONLY, EXC_FUNCNAME( "SKEW.P" ) }, + { ocSkewP, 255, 2, MX, V, { RO_E, RO }, EXC_FUNCFLAG_EXPORTONLY, EXC_FUNCNAME( "SKEW.P" ) } }; #define EXC_FUNCENTRY_ODF( opcode, minparam, maxparam, flags, asciiname ) \ @@ -401,7 +405,6 @@ static const XclFunctionInfo saFuncTable_Odf[] = EXC_FUNCENTRY_ODF( ocFormula, 1, 1, 0, "FORMULA" ), EXC_FUNCENTRY_ODF( ocGamma, 1, 1, 0, "GAMMA" ), EXC_FUNCENTRY_ODF( ocGauss, 1, 1, 0, "GAUSS" ), - EXC_FUNCENTRY_ODF( ocIfna, 2, 2, 0, "IFNA" ), EXC_FUNCENTRY_ODF( ocIsFormula, 1, 1, 0, "ISFORMULA" ), EXC_FUNCENTRY_ODF( ocWeek, 1, 2, 0, "ISOWEEKNUM" ), EXC_FUNCENTRY_ODF( ocMatrixUnit, 1, 1, 0, "MUNIT" ), @@ -412,7 +415,6 @@ static const XclFunctionInfo saFuncTable_Odf[] = EXC_FUNCENTRY_ODF( ocZGZ, 3, 3, 0, "RRI" ), EXC_FUNCENTRY_ODF( ocTable, 0, 1, 0, "SHEET" ), EXC_FUNCENTRY_ODF( ocTables, 0, 1, 0, "SHEETS" ), - EXC_FUNCENTRY_ODF( ocSkewP, 1, MX, 0, "SKEWP" ), EXC_FUNCENTRY_ODF( ocUnichar, 1, 1, 0, "UNICHAR" ), EXC_FUNCENTRY_ODF( ocUnicode, 1, 1, 0, "UNICODE" ), EXC_FUNCENTRY_ODF( ocXor, 1, MX, 0, "XOR" )
