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" )

Reply via email to