1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <funcdesc.hxx>
22 #include <addincol.hxx>
23 #include <appoptio.hxx>
24 #include <callform.hxx>
25 #include <compiler.hxx>
26 #include <compiler.hrc>
28 #include <scfuncs.hrc>
30 #include <scresid.hxx>
33 #include <rtl/ustring.hxx>
34 #include <rtl/ustrbuf.hxx>
35 #include <unotools/collatorwrapper.hxx>
36 #include <formula/funcvarargs.h>
37 #include <osl/diagnose.h>
46 * An opcode from include/formula/compiler.hxx
50 * Pointer to list of strings
52 const TranslateId
* pResource
;
54 * Count of list of strings
60 * Bit 1: boolean flag whether function is suppressed. Usually 0. This
61 * may be used to add UI string resources before UI freeze if
62 * implementation isn't ready yet without displaying them in the
63 * function wizard, most recent used list and other UI elements. Also
64 * not available via API then.
66 * Bit 2: boolean flag whether function is hidden in the Function
67 * Wizard unless used in an expression.
69 sal_uInt16 nFunctionFlags
;
71 * Function group (text, math, ...), one of ID_FUNCTION_GRP_...
75 * Help ID, HID_FUNC_...
79 * Number of parameters. VAR_ARGS if variable number, or
80 * VAR_ARGS+number if number of fixed parameters and variable
81 * arguments following. Or PAIRED_VAR_ARGS if variable number of
82 * paired parameters, or PAIRED_VAR_ARGS+number if number of fixed
83 * parameters and variable paired arguments following.
87 * For every parameter:
88 * Boolean flag whether the parameter is optional.
90 sal_uInt8 aOptionalArgs
[7];
92 * Limited number of maximum (variable) parameters, or 0 if no specific
93 * limit other than the general VAR_ARGS-1 value.
95 sal_uInt16 nVarArgsLimit
;
100 static void ScFuncRes(const ScFuncDescCore
&rEntry
, ScFuncDesc
*, bool& rbSuppressed
);
102 ScFuncDesc::ScFuncDesc() :
103 pDefArgFlags (nullptr),
113 ScFuncDesc::~ScFuncDesc()
118 void ScFuncDesc::Clear()
120 sal_uInt16 nArgs
= nArgCount
;
121 if (nArgs
>= PAIRED_VAR_ARGS
)
122 nArgs
-= PAIRED_VAR_ARGS
- 2;
123 else if (nArgs
>= VAR_ARGS
)
124 nArgs
-= VAR_ARGS
- 1;
127 delete [] pDefArgFlags
;
132 maDefArgNames
.clear();
133 maDefArgDescs
.clear();
134 pDefArgFlags
= nullptr;
146 OUString
ScFuncDesc::GetParamList() const
148 OUString
sep(ScCompiler::GetNativeSymbol(ocSep
));
154 if ( nArgCount
< VAR_ARGS
)
156 sal_uInt16 nLastSuppressed
= nArgCount
;
157 sal_uInt16 nLastAdded
= nArgCount
;
158 for ( sal_uInt16 i
=0; i
<nArgCount
; i
++ )
161 aSig
.append(maDefArgNames
[i
]);
162 if ( i
!= nArgCount
-1 )
164 aSig
.append(sep
+ " " );
167 // If only suppressed parameters follow the last added parameter,
169 if (nLastSuppressed
< nArgCount
&& nLastAdded
< nLastSuppressed
&&
170 aSig
.getLength() >= 2)
171 aSig
.setLength(aSig
.getLength() - 2);
173 else if ( nArgCount
< PAIRED_VAR_ARGS
)
175 for ( sal_uInt16 nArg
= 0; nArg
< nVarArgsStart
; nArg
++ )
177 aSig
.append(maDefArgNames
[nArg
] + sep
+ " ");
179 /* NOTE: Currently there are no suppressed var args parameters. If
180 * there were, we'd have to cope with it here and above for the fix
181 * parameters. For now parameters are always added, so no special
182 * treatment of a trailing "; " necessary. */
183 aSig
.append(maDefArgNames
[nVarArgsStart
]
186 + maDefArgNames
[nVarArgsStart
]
192 for ( sal_uInt16 nArg
= 0; nArg
< nVarArgsStart
; nArg
++ )
194 aSig
.append(maDefArgNames
[nArg
] + sep
+ " ");
197 aSig
.append(maDefArgNames
[nVarArgsStart
]
199 + maDefArgNames
[nVarArgsStart
+1]
200 + (mxFuncName
!= "LET" ? "1" : "2") + sep
202 + maDefArgNames
[nVarArgsStart
]
204 + maDefArgNames
[nVarArgsStart
+1]
205 + (mxFuncName
!= "LET" ? "2" : "3") + sep
+ " ... " );
209 return aSig
.makeStringAndClear();
212 OUString
ScFuncDesc::getSignature() const
218 aSig
.append(*mxFuncName
);
220 OUString aParamList
= GetParamList();
221 if( !aParamList
.isEmpty() )
223 aSig
.append( "( " + aParamList
224 // U+00A0 (NBSP) prevents automatic line break
230 return aSig
.makeStringAndClear();
233 OUString
ScFuncDesc::getFormula( const ::std::vector
< OUString
>& _aArguments
) const
235 OUString sep
= ScCompiler::GetNativeSymbol(ocSep
);
237 OUStringBuffer aFormula
;
241 aFormula
.append( *mxFuncName
+ "(" );
242 if ( nArgCount
> 0 && !_aArguments
.empty() && !_aArguments
[0].isEmpty())
244 ::std::vector
< OUString
>::const_iterator aIter
= _aArguments
.begin();
245 ::std::vector
< OUString
>::const_iterator aEnd
= _aArguments
.end();
247 aFormula
.append( *aIter
);
249 while( aIter
!= aEnd
&& !aIter
->isEmpty() )
251 aFormula
.append( sep
+ *aIter
);
256 aFormula
.append( ")" );
258 return aFormula
.makeStringAndClear();
261 sal_uInt16
ScFuncDesc::GetSuppressedArgCount() const
266 OUString
ScFuncDesc::getFunctionName() const
274 const formula::IFunctionCategory
* ScFuncDesc::getCategory() const
276 return ScGlobal::GetStarCalcFunctionMgr()->getCategory(nCategory
- 1);
279 OUString
ScFuncDesc::getDescription() const
287 sal_Int32
ScFuncDesc::getSuppressedArgumentCount() const
289 return GetSuppressedArgCount();
292 void ScFuncDesc::fillVisibleArgumentMapping(::std::vector
<sal_uInt16
>& _rArguments
) const
294 _rArguments
.resize( nArgCount
);
295 sal_uInt16 value
= 0;
296 for (auto & argument
: _rArguments
)
299 sal_uInt16 nArgs
= nArgCount
;
300 if (nArgs
>= PAIRED_VAR_ARGS
)
301 nArgs
-= PAIRED_VAR_ARGS
- 2;
302 else if (nArgs
>= VAR_ARGS
)
303 nArgs
-= VAR_ARGS
- 1;
304 for (sal_uInt16 i
=0; i
< nArgs
; ++i
)
306 _rArguments
.push_back(i
);
310 void ScFuncDesc::initArgumentInfo() const
312 // get the full argument description
313 // (add-in has to be instantiated to get the type information)
315 if ( !(bIncomplete
&& mxFuncName
) )
318 ScUnoAddInCollection
& rAddIns
= *ScGlobal::GetAddInCollection();
319 OUString
aIntName(rAddIns
.FindFunction( *mxFuncName
, true )); // pFuncName is upper-case
321 if ( !aIntName
.isEmpty() )
323 // GetFuncData with bComplete=true loads the component and updates
324 // the global function list if needed.
326 rAddIns
.GetFuncData( aIntName
, true );
331 OSL_FAIL( "couldn't initialize add-in function" );
332 const_cast<ScFuncDesc
*>(this)->bIncomplete
= false; // even if there was an error, don't try again
336 OUString
ScFuncDesc::getHelpId() const
341 bool ScFuncDesc::isHidden() const
346 sal_uInt32
ScFuncDesc::getParameterCount() const
351 sal_uInt32
ScFuncDesc::getVarArgsStart() const
353 return nVarArgsStart
;
356 sal_uInt32
ScFuncDesc::getVarArgsLimit() const
358 return nVarArgsLimit
;
361 OUString
ScFuncDesc::getParameterName(sal_uInt32 _nPos
) const
363 return maDefArgNames
[_nPos
];
366 OUString
ScFuncDesc::getParameterDescription(sal_uInt32 _nPos
) const
368 return maDefArgDescs
[_nPos
];
371 bool ScFuncDesc::isParameterOptional(sal_uInt32 _nPos
) const
373 return pDefArgFlags
[_nPos
].bOptional
;
376 bool ScFuncDesc::compareByName(const ScFuncDesc
* a
, const ScFuncDesc
* b
)
378 return (ScGlobal::GetCaseCollator().compareString(*a
->mxFuncName
, *b
->mxFuncName
) < 0);
381 #define ENTRY(CODE) CODE, SAL_N_ELEMENTS(CODE)
383 ScFunctionList::ScFunctionList( bool bEnglishFunctionNames
)
384 : mbEnglishFunctionNames( bEnglishFunctionNames
)
386 sal_Int32 nMaxFuncNameLen
= 0; // Length of longest function name
388 // See ScFuncDescCore definition for format details.
389 // This list must be sorted in order of the opcode, dbgutil builds enable _GLIBCXX_DEBUG
390 // which will concept check that the list is sorted on first use to ensure this holds
391 static const ScFuncDescCore aDescs
[] =
393 { SC_OPCODE_IF
, ENTRY(SC_OPCODE_IF_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_WENN
, 3, { 0, 1, 1 }, 0 },
394 { SC_OPCODE_IF_ERROR
, ENTRY(SC_OPCODE_IF_ERROR_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_IFERROR
, 2, { 0, 0 }, 0 },
395 { SC_OPCODE_IF_NA
, ENTRY(SC_OPCODE_IF_NA_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_IFNA
, 2, { 0, 0 }, 0 },
396 { SC_OPCODE_CHOOSE
, ENTRY(SC_OPCODE_CHOOSE_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_WAHL
, VAR_ARGS
+1, { 0, 0 }, 31 },
397 { SC_OPCODE_LET
, ENTRY(SC_OPCODE_LET_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_LET_MS
, PAIRED_VAR_ARGS
+ 1, { 0, 0, 0 }, 0 },
398 { SC_OPCODE_AND
, ENTRY(SC_OPCODE_AND_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_UND
, VAR_ARGS
, { 0 }, 0 },
399 { SC_OPCODE_OR
, ENTRY(SC_OPCODE_OR_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_ODER
, VAR_ARGS
, { 0 }, 0 },
400 { SC_OPCODE_PI
, ENTRY(SC_OPCODE_PI_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_PI
, 0, { }, 0 },
401 { SC_OPCODE_RANDOM
, ENTRY(SC_OPCODE_RANDOM_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ZUFALLSZAHL
, 0, { }, 0 },
402 { SC_OPCODE_TRUE
, ENTRY(SC_OPCODE_TRUE_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_WAHR
, 0, { }, 0 },
403 { SC_OPCODE_FALSE
, ENTRY(SC_OPCODE_FALSE_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_FALSCH
, 0, { }, 0 },
404 { SC_OPCODE_GET_ACT_DATE
, ENTRY(SC_OPCODE_GET_ACT_DATE_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_HEUTE
, 0, { }, 0 },
405 { SC_OPCODE_GET_ACT_TIME
, ENTRY(SC_OPCODE_GET_ACT_TIME_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_JETZT
, 0, { }, 0 },
406 { SC_OPCODE_NO_VALUE
, ENTRY(SC_OPCODE_NO_VALUE_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_NV
, 0, { }, 0 },
407 { SC_OPCODE_CURRENT
, ENTRY(SC_OPCODE_CURRENT_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_AKTUELL
, 0, { }, 0 },
408 { SC_OPCODE_RANDOM_NV
, ENTRY(SC_OPCODE_RANDOM_NV_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_RAND_NV
, 0, { }, 0 },
409 { SC_OPCODE_DEG
, ENTRY(SC_OPCODE_DEG_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_DEG
, 1, { 0 }, 0 },
410 { SC_OPCODE_RAD
, ENTRY(SC_OPCODE_RAD_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_RAD
, 1, { 0 }, 0 },
411 { SC_OPCODE_SIN
, ENTRY(SC_OPCODE_SIN_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_SIN
, 1, { 0 }, 0 },
412 { SC_OPCODE_COS
, ENTRY(SC_OPCODE_COS_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_COS
, 1, { 0 }, 0 },
413 { SC_OPCODE_TAN
, ENTRY(SC_OPCODE_TAN_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_TAN
, 1, { 0 }, 0 },
414 { SC_OPCODE_COT
, ENTRY(SC_OPCODE_COT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_COT
, 1, { 0 }, 0 },
415 { SC_OPCODE_ARC_SIN
, ENTRY(SC_OPCODE_ARC_SIN_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARCSIN
, 1, { 0 }, 0 },
416 { SC_OPCODE_ARC_COS
, ENTRY(SC_OPCODE_ARC_COS_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARCCOS
, 1, { 0 }, 0 },
417 { SC_OPCODE_ARC_TAN
, ENTRY(SC_OPCODE_ARC_TAN_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARCTAN
, 1, { 0 }, 0 },
418 { SC_OPCODE_ARC_COT
, ENTRY(SC_OPCODE_ARC_COT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARCCOT
, 1, { 0 }, 0 },
419 { SC_OPCODE_SIN_HYP
, ENTRY(SC_OPCODE_SIN_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_SINHYP
, 1, { 0 }, 0 },
420 { SC_OPCODE_COS_HYP
, ENTRY(SC_OPCODE_COS_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_COSHYP
, 1, { 0 }, 0 },
421 { SC_OPCODE_TAN_HYP
, ENTRY(SC_OPCODE_TAN_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_TANHYP
, 1, { 0 }, 0 },
422 { SC_OPCODE_COT_HYP
, ENTRY(SC_OPCODE_COT_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_COTHYP
, 1, { 0 }, 0 },
423 { SC_OPCODE_ARC_SIN_HYP
, ENTRY(SC_OPCODE_ARC_SIN_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARSINHYP
, 1, { 0 }, 0 },
424 { SC_OPCODE_ARC_COS_HYP
, ENTRY(SC_OPCODE_ARC_COS_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARCOSHYP
, 1, { 0 }, 0 },
425 { SC_OPCODE_ARC_TAN_HYP
, ENTRY(SC_OPCODE_ARC_TAN_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARTANHYP
, 1, { 0 }, 0 },
426 { SC_OPCODE_ARC_COT_HYP
, ENTRY(SC_OPCODE_ARC_COT_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARCOTHYP
, 1, { 0 }, 0 },
427 { SC_OPCODE_COSECANT
, ENTRY(SC_OPCODE_COSECANT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_COSECANT
, 1, { 0 }, 0 },
428 { SC_OPCODE_SECANT
, ENTRY(SC_OPCODE_SECANT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_SECANT
, 1, { 0 }, 0 },
429 { SC_OPCODE_COSECANT_HYP
, ENTRY(SC_OPCODE_COSECANT_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_COSECANTHYP
, 1, { 0 }, 0 },
430 { SC_OPCODE_SECANT_HYP
, ENTRY(SC_OPCODE_SECANT_HYP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_SECANTHYP
, 1, { 0 }, 0 },
431 { SC_OPCODE_EXP
, ENTRY(SC_OPCODE_EXP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_EXP
, 1, { 0 }, 0 },
432 { SC_OPCODE_LN
, ENTRY(SC_OPCODE_LN_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_LN
, 1, { 0 }, 0 },
433 { SC_OPCODE_SQRT
, ENTRY(SC_OPCODE_SQRT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_WURZEL
, 1, { 0 }, 0 },
434 { SC_OPCODE_FACT
, ENTRY(SC_OPCODE_FACT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_FAKULTAET
, 1, { 0 }, 0 },
435 { SC_OPCODE_GET_YEAR
, ENTRY(SC_OPCODE_GET_YEAR_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_JAHR
, 1, { 0 }, 0 },
436 { SC_OPCODE_GET_MONTH
, ENTRY(SC_OPCODE_GET_MONTH_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_MONAT
, 1, { 0 }, 0 },
437 { SC_OPCODE_GET_DAY
, ENTRY(SC_OPCODE_GET_DAY_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_TAG
, 1, { 0 }, 0 },
438 { SC_OPCODE_GET_HOUR
, ENTRY(SC_OPCODE_GET_HOUR_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_STUNDE
, 1, { 0 }, 0 },
439 { SC_OPCODE_GET_MIN
, ENTRY(SC_OPCODE_GET_MIN_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_MINUTE
, 1, { 0 }, 0 },
440 { SC_OPCODE_GET_SEC
, ENTRY(SC_OPCODE_GET_SEC_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_SEKUNDE
, 1, { 0 }, 0 },
441 { SC_OPCODE_PLUS_MINUS
, ENTRY(SC_OPCODE_PLUS_MINUS_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_VORZEICHEN
, 1, { 0 }, 0 },
442 { SC_OPCODE_ABS
, ENTRY(SC_OPCODE_ABS_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ABS
, 1, { 0 }, 0 },
443 { SC_OPCODE_INT
, ENTRY(SC_OPCODE_INT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_GANZZAHL
, 1, { 0 }, 0 },
444 { SC_OPCODE_PHI
, ENTRY(SC_OPCODE_PHI_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_PHI
, 1, { 0 }, 0 },
445 { SC_OPCODE_GAUSS
, ENTRY(SC_OPCODE_GAUSS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GAUSS
, 1, { 0 }, 0 },
446 { SC_OPCODE_IS_EMPTY
, ENTRY(SC_OPCODE_IS_EMPTY_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTLEER
, 1, { 0 }, 0 },
447 { SC_OPCODE_IS_STRING
, ENTRY(SC_OPCODE_IS_STRING_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTTEXT
, 1, { 0 }, 0 },
448 { SC_OPCODE_IS_NON_STRING
, ENTRY(SC_OPCODE_IS_NON_STRING_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTKTEXT
, 1, { 0 }, 0 },
449 { SC_OPCODE_IS_LOGICAL
, ENTRY(SC_OPCODE_IS_LOGICAL_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTLOG
, 1, { 0 }, 0 },
450 { SC_OPCODE_TYPE
, ENTRY(SC_OPCODE_TYPE_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_TYP
, 1, { 0 }, 0 },
451 { SC_OPCODE_IS_REF
, ENTRY(SC_OPCODE_IS_REF_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTBEZUG
, 1, { 0 }, 0 },
452 { SC_OPCODE_IS_VALUE
, ENTRY(SC_OPCODE_IS_VALUE_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTZAHL
, 1, { 0 }, 0 },
453 { SC_OPCODE_IS_FORMULA
, ENTRY(SC_OPCODE_IS_FORMULA_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTFORMEL
, 1, { 0 }, 0 },
454 { SC_OPCODE_IS_NV
, ENTRY(SC_OPCODE_IS_NV_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTNV
, 1, { 0 }, 0 },
455 { SC_OPCODE_IS_ERR
, ENTRY(SC_OPCODE_IS_ERR_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTFEHL
, 1, { 0 }, 0 },
456 { SC_OPCODE_IS_ERROR
, ENTRY(SC_OPCODE_IS_ERROR_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTFEHLER
, 1, { 0 }, 0 },
457 { SC_OPCODE_IS_EVEN
, ENTRY(SC_OPCODE_IS_EVEN_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTGERADE
, 1, { 0 }, 0 },
458 { SC_OPCODE_IS_ODD
, ENTRY(SC_OPCODE_IS_ODD_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ISTUNGERADE
, 1, { 0 }, 0 },
459 { SC_OPCODE_N
, ENTRY(SC_OPCODE_N_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_N
, 1, { 0 }, 0 },
460 { SC_OPCODE_GET_DATE_VALUE
, ENTRY(SC_OPCODE_GET_DATE_VALUE_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_DATWERT
, 1, { 0 }, 0 },
461 { SC_OPCODE_GET_TIME_VALUE
, ENTRY(SC_OPCODE_GET_TIME_VALUE_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_ZEITWERT
, 1, { 0 }, 0 },
462 { SC_OPCODE_CODE
, ENTRY(SC_OPCODE_CODE_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_CODE
, 1, { 0 }, 0 },
463 { SC_OPCODE_TRIM
, ENTRY(SC_OPCODE_TRIM_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_GLAETTEN
, 1, { 0 }, 0 },
464 { SC_OPCODE_UPPER
, ENTRY(SC_OPCODE_UPPER_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_GROSS
, 1, { 0 }, 0 },
465 { SC_OPCODE_PROPER
, ENTRY(SC_OPCODE_PROPER_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_GROSS2
, 1, { 0 }, 0 },
466 { SC_OPCODE_LOWER
, ENTRY(SC_OPCODE_LOWER_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_KLEIN
, 1, { 0 }, 0 },
467 { SC_OPCODE_LEN
, ENTRY(SC_OPCODE_LEN_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_LAENGE
, 1, { 0 }, 0 },
468 { SC_OPCODE_T
, ENTRY(SC_OPCODE_T_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_T
, 1, { 0 }, 0 },
469 { SC_OPCODE_VALUE
, ENTRY(SC_OPCODE_VALUE_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_WERT
, 1, { 0 }, 0 },
470 { SC_OPCODE_CLEAN
, ENTRY(SC_OPCODE_CLEAN_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_SAEUBERN
, 1, { 0 }, 0 },
471 { SC_OPCODE_CHAR
, ENTRY(SC_OPCODE_CHAR_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_ZEICHEN
, 1, { 0 }, 0 },
472 { SC_OPCODE_LOG10
, ENTRY(SC_OPCODE_LOG10_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_LOG10
, 1, { 0 }, 0 },
473 { SC_OPCODE_EVEN
, ENTRY(SC_OPCODE_EVEN_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_GERADE
, 1, { 0 }, 0 },
474 { SC_OPCODE_ODD
, ENTRY(SC_OPCODE_ODD_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_UNGERADE
, 1, { 0 }, 0 },
475 { SC_OPCODE_STD_NORM_DIST
, ENTRY(SC_OPCODE_STD_NORM_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STANDNORMVERT
, 1, { 0 }, 0 },
476 { SC_OPCODE_FISHER
, ENTRY(SC_OPCODE_FISHER_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FISHER
, 1, { 0 }, 0 },
477 { SC_OPCODE_FISHER_INV
, ENTRY(SC_OPCODE_FISHER_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FISHERINV
, 1, { 0 }, 0 },
478 { SC_OPCODE_S_NORM_INV
, ENTRY(SC_OPCODE_S_NORM_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STANDNORMINV
, 1, { 0 }, 0 },
479 { SC_OPCODE_GAMMA_LN
, ENTRY(SC_OPCODE_GAMMA_LN_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GAMMALN
, 1, { 0 }, 0 },
480 { SC_OPCODE_ERROR_TYPE
, ENTRY(SC_OPCODE_ERROR_TYPE_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_FEHLERTYP
, 1, { 0 }, 0 },
481 { SC_OPCODE_FORMULA
, ENTRY(SC_OPCODE_FORMULA_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_FORMEL
, 1, { 0 }, 0 },
482 { SC_OPCODE_ARABIC
, ENTRY(SC_OPCODE_ARABIC_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_ARABISCH
, 1, { 0 }, 0 },
483 { SC_OPCODE_INFO
, ENTRY(SC_OPCODE_INFO_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_INFO
, 1, { 0 }, 0 },
484 { SC_OPCODE_BAHTTEXT
, ENTRY(SC_OPCODE_BAHTTEXT_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_BAHTTEXT
, 1, { 0 }, 0 },
485 { SC_OPCODE_JIS
, ENTRY(SC_OPCODE_JIS_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_JIS
, 1, { 0 }, 0 },
486 { SC_OPCODE_ASC
, ENTRY(SC_OPCODE_ASC_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_ASC
, 1, { 0 }, 0 },
487 { SC_OPCODE_UNICODE
, ENTRY(SC_OPCODE_UNICODE_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_UNICODE
, 1, { 0 }, 0 },
488 { SC_OPCODE_UNICHAR
, ENTRY(SC_OPCODE_UNICHAR_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_UNICHAR
, 1, { 0 }, 0 },
489 { SC_OPCODE_GAMMA
, ENTRY(SC_OPCODE_GAMMA_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GAMMA
, 1, { 0 }, 0 },
490 { SC_OPCODE_GAMMA_LN_MS
, ENTRY(SC_OPCODE_GAMMA_LN_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GAMMALN_MS
, 1, { 0 }, 0 },
491 { SC_OPCODE_ERF_MS
, ENTRY(SC_OPCODE_ERF_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ERF_MS
, 1, { 0 }, 0 },
492 { SC_OPCODE_ERFC_MS
, ENTRY(SC_OPCODE_ERFC_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ERFC_MS
, 1, { 0 }, 0 },
493 { SC_OPCODE_ERROR_TYPE_ODF
, ENTRY(SC_OPCODE_ERROR_TYPE_ODF_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_ERROR_TYPE_ODF
, 1, { 0 }, 0 },
494 { SC_OPCODE_ENCODEURL
, ENTRY(SC_OPCODE_ENCODEURL_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_ENCODEURL
, 1, { 0 }, 0 },
495 { SC_OPCODE_ISOWEEKNUM
, ENTRY(SC_OPCODE_ISOWEEKNUM_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_ISOWEEKNUM
, 1, { 0 }, 0 },
496 { SC_OPCODE_NOT
, ENTRY(SC_OPCODE_NOT_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_NICHT
, 1, { 0 }, 0 },
497 { SC_OPCODE_ARC_TAN_2
, ENTRY(SC_OPCODE_ARC_TAN_2_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ARCTAN2
, 2, { 0, 0 }, 0 },
498 { SC_OPCODE_CEIL
, ENTRY(SC_OPCODE_CEIL_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_OBERGRENZE
, 3, { 0, 1, 1 }, 0 },
499 { SC_OPCODE_FLOOR
, ENTRY(SC_OPCODE_FLOOR_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_UNTERGRENZE
, 3, { 0, 1, 1 }, 0 },
500 { SC_OPCODE_ROUND
, ENTRY(SC_OPCODE_ROUND_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_RUNDEN
, 2, { 0, 1 }, 0 },
501 { SC_OPCODE_ROUND_UP
, ENTRY(SC_OPCODE_ROUND_UP_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_AUFRUNDEN
, 2, { 0, 1 }, 0 },
502 { SC_OPCODE_ROUND_DOWN
, ENTRY(SC_OPCODE_ROUND_DOWN_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ABRUNDEN
, 2, { 0, 1 }, 0 },
503 { SC_OPCODE_TRUNC
, ENTRY(SC_OPCODE_TRUNC_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_KUERZEN
, 2, { 0, 0 }, 0 },
504 { SC_OPCODE_LOG
, ENTRY(SC_OPCODE_LOG_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_LOG
, 2, { 0, 1 }, 0 },
505 { SC_OPCODE_POWER
, ENTRY(SC_OPCODE_POWER_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_POTENZ
, 2, { 0, 0 }, 0 },
506 { SC_OPCODE_GCD
, ENTRY(SC_OPCODE_GCD_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_GGT
, VAR_ARGS
, { 0 }, 0 },
507 { SC_OPCODE_LCM
, ENTRY(SC_OPCODE_LCM_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_KGV
, VAR_ARGS
, { 0 }, 0 },
508 { SC_OPCODE_MOD
, ENTRY(SC_OPCODE_MOD_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_REST
, 2, { 0, 0 }, 0 },
509 { SC_OPCODE_SUM_PRODUCT
, ENTRY(SC_OPCODE_SUM_PRODUCT_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_SUMMENPRODUKT
, VAR_ARGS
, { 0 }, 0 },
510 { SC_OPCODE_SUM_SQ
, ENTRY(SC_OPCODE_SUM_SQ_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_QUADRATESUMME
, VAR_ARGS
, { 0 }, 0 },
511 { SC_OPCODE_SUM_X2MY2
, ENTRY(SC_OPCODE_SUM_X2MY2_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_SUMMEX2MY2
, 2, { 0, 0 }, 0 },
512 { SC_OPCODE_SUM_X2DY2
, ENTRY(SC_OPCODE_SUM_X2DY2_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_SUMMEX2PY2
, 2, { 0, 0 }, 0 },
513 { SC_OPCODE_SUM_XMY2
, ENTRY(SC_OPCODE_SUM_XMY2_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_SUMMEXMY2
, 2, { 0, 0 }, 0 },
514 { SC_OPCODE_GET_DATE
, ENTRY(SC_OPCODE_GET_DATE_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_DATUM
, 3, { 0, 0, 0 }, 0 },
515 { SC_OPCODE_GET_TIME
, ENTRY(SC_OPCODE_GET_TIME_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_ZEIT
, 3, { 0, 0, 0 }, 0 },
516 { SC_OPCODE_GET_DIFF_DATE
, ENTRY(SC_OPCODE_GET_DIFF_DATE_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_TAGE
, 2, { 0, 0 }, 0 },
517 { SC_OPCODE_GET_DIFF_DATE_360
, ENTRY(SC_OPCODE_GET_DIFF_DATE_360_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_TAGE360
, 3, { 0, 0, 1 }, 0 },
518 { SC_OPCODE_MIN
, ENTRY(SC_OPCODE_MIN_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MIN
, VAR_ARGS
, { 0 }, 0 },
519 { SC_OPCODE_MAX
, ENTRY(SC_OPCODE_MAX_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MAX
, VAR_ARGS
, { 0 }, 0 },
520 { SC_OPCODE_SUM
, ENTRY(SC_OPCODE_SUM_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_SUMME
, VAR_ARGS
, { 0 }, 0 },
521 { SC_OPCODE_PRODUCT
, ENTRY(SC_OPCODE_PRODUCT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_PRODUKT
, VAR_ARGS
, { 0 }, 0 },
522 { SC_OPCODE_AVERAGE
, ENTRY(SC_OPCODE_AVERAGE_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MITTELWERT
, VAR_ARGS
, { 0 }, 0 },
523 { SC_OPCODE_COUNT
, ENTRY(SC_OPCODE_COUNT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ANZAHL
, VAR_ARGS
, { 0 }, 0 },
524 { SC_OPCODE_COUNT_2
, ENTRY(SC_OPCODE_COUNT_2_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ANZAHL2
, VAR_ARGS
, { 0 }, 0 },
525 { SC_OPCODE_NPV
, ENTRY(SC_OPCODE_NPV_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_NBW
, VAR_ARGS
+1, { 0, 0 }, 0 },
526 { SC_OPCODE_IRR
, ENTRY(SC_OPCODE_IRR_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_IKV
, 2, { 0, 1 }, 0 },
527 { SC_OPCODE_VAR
, ENTRY(SC_OPCODE_VAR_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_VARIANZ
, VAR_ARGS
, { 0 }, 0 },
528 { SC_OPCODE_VAR_P
, ENTRY(SC_OPCODE_VAR_P_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_VARIANZEN
, VAR_ARGS
, { 0 }, 0 },
529 { SC_OPCODE_ST_DEV
, ENTRY(SC_OPCODE_ST_DEV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STABW
, VAR_ARGS
, { 0 }, 0 },
530 { SC_OPCODE_ST_DEV_P
, ENTRY(SC_OPCODE_ST_DEV_P_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STABWN
, VAR_ARGS
, { 0 }, 0 },
531 { SC_OPCODE_B
, ENTRY(SC_OPCODE_B_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_B
, 4, { 0, 0, 0, 1 }, 0 },
532 { SC_OPCODE_NORM_DIST
, ENTRY(SC_OPCODE_NORM_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_NORMVERT
, 4, { 0, 0, 0, 1 }, 0 },
533 { SC_OPCODE_EXP_DIST
, ENTRY(SC_OPCODE_EXP_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_EXPONVERT
, 3, { 0, 0, 0 }, 0 },
534 { SC_OPCODE_BINOM_DIST
, ENTRY(SC_OPCODE_BINOM_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_BINOMVERT
, 4, { 0, 0, 0, 0 }, 0 },
535 { SC_OPCODE_POISSON_DIST
, ENTRY(SC_OPCODE_POISSON_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_POISSON
, 3, { 0, 0, 1 }, 0 },
536 { SC_OPCODE_COMBIN
, ENTRY(SC_OPCODE_COMBIN_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_KOMBINATIONEN
, 2, { 0, 0 }, 0 },
537 { SC_OPCODE_COMBIN_A
, ENTRY(SC_OPCODE_COMBIN_A_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_KOMBINATIONEN2
, 2, { 0, 0 }, 0 },
538 { SC_OPCODE_PERMUT
, ENTRY(SC_OPCODE_PERMUT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_VARIATIONEN
, 2, { 0, 0 }, 0 },
539 { SC_OPCODE_PERMUTATION_A
, ENTRY(SC_OPCODE_PERMUTATION_A_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_VARIATIONEN2
, 2, { 0, 0 }, 0 },
540 { SC_OPCODE_PV
, ENTRY(SC_OPCODE_PV_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_BW
, 5, { 0, 0, 0, 1, 1 }, 0 },
541 { SC_OPCODE_SYD
, ENTRY(SC_OPCODE_SYD_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_DIA
, 4, { 0, 0, 0, 0 }, 0 },
542 { SC_OPCODE_DDB
, ENTRY(SC_OPCODE_DDB_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_GDA
, 5, { 0, 0, 0, 0, 1 }, 0 },
543 { SC_OPCODE_DB
, ENTRY(SC_OPCODE_DB_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_GDA2
, 5, { 0, 0, 0, 0, 1 }, 0 },
544 { SC_OPCODE_VBD
, ENTRY(SC_OPCODE_VBD_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_VDB
, 7, { 0, 0, 0, 0, 0, 1, 1 }, 0 },
545 { SC_OPCODE_PDURATION
, ENTRY(SC_OPCODE_PDURATION_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_LAUFZEIT
, 3, { 0, 0, 0 }, 0 },
546 { SC_OPCODE_SLN
, ENTRY(SC_OPCODE_SLN_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_LIA
, 3, { 0, 0, 0 }, 0 },
547 { SC_OPCODE_PMT
, ENTRY(SC_OPCODE_PMT_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_RMZ
, 5, { 0, 0, 0, 1, 1 }, 0 },
548 { SC_OPCODE_COLUMNS
, ENTRY(SC_OPCODE_COLUMNS_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_SPALTEN
, 1, { 0 }, 0 },
549 { SC_OPCODE_ROWS
, ENTRY(SC_OPCODE_ROWS_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_ZEILEN
, 1, { 0 }, 0 },
550 { SC_OPCODE_COLUMN
, ENTRY(SC_OPCODE_COLUMN_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_SPALTE
, 1, { 1 }, 0 },
551 { SC_OPCODE_ROW
, ENTRY(SC_OPCODE_ROW_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_ZEILE
, 1, { 1 }, 0 },
552 { SC_OPCODE_RRI
, ENTRY(SC_OPCODE_RRI_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_ZGZ
, 3, { 0, 0, 0 }, 0 },
553 { SC_OPCODE_FV
, ENTRY(SC_OPCODE_FV_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_ZW
, 5, { 0, 0, 0, 1, 1 }, 0 },
554 { SC_OPCODE_NPER
, ENTRY(SC_OPCODE_NPER_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_ZZR
, 5, { 0, 0, 0, 1, 1 }, 0 },
555 { SC_OPCODE_RATE
, ENTRY(SC_OPCODE_RATE_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_ZINS
, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
556 { SC_OPCODE_IPMT
, ENTRY(SC_OPCODE_IPMT_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_ZINSZ
, 6, { 0, 0, 0, 0, 1, 1 }, 0 },
557 { SC_OPCODE_PPMT
, ENTRY(SC_OPCODE_PPMT_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_KAPZ
, 6, { 0, 0, 0, 0, 1, 1 }, 0 },
558 { SC_OPCODE_CUM_IPMT
, ENTRY(SC_OPCODE_CUM_IPMT_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_KUMZINSZ
, 6, { 0, 0, 0, 0, 0, 0 }, 0 },
559 { SC_OPCODE_CUM_PRINC
, ENTRY(SC_OPCODE_CUM_PRINC_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_KUMKAPITAL
, 6, { 0, 0, 0, 0, 0, 0 }, 0 },
560 { SC_OPCODE_EFFECT
, ENTRY(SC_OPCODE_EFFECT_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_EFFEKTIV
, 2, { 0, 0 }, 0 },
561 { SC_OPCODE_NOMINAL
, ENTRY(SC_OPCODE_NOMINAL_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_NOMINAL
, 2, { 0, 0 }, 0 },
562 { SC_OPCODE_SUB_TOTAL
, ENTRY(SC_OPCODE_SUB_TOTAL_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_TEILERGEBNIS
, 2, { 0, 0 }, 0 },
563 { SC_OPCODE_DB_SUM
, ENTRY(SC_OPCODE_DB_SUM_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBSUMME
, 3, { 0, 0, 0 }, 0 },
564 { SC_OPCODE_DB_COUNT
, ENTRY(SC_OPCODE_DB_COUNT_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBANZAHL
, 3, { 0, 1, 0 }, 0 },
565 { SC_OPCODE_DB_COUNT_2
, ENTRY(SC_OPCODE_DB_COUNT_2_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBANZAHL2
, 3, { 0, 1, 0 }, 0 },
566 { SC_OPCODE_DB_AVERAGE
, ENTRY(SC_OPCODE_DB_AVERAGE_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBMITTELWERT
, 3, { 0, 0, 0 }, 0 },
567 { SC_OPCODE_DB_GET
, ENTRY(SC_OPCODE_DB_GET_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBAUSZUG
, 3, { 0, 0, 0 }, 0 },
568 { SC_OPCODE_DB_MAX
, ENTRY(SC_OPCODE_DB_MAX_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBMAX
, 3, { 0, 0, 0 }, 0 },
569 { SC_OPCODE_DB_MIN
, ENTRY(SC_OPCODE_DB_MIN_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBMIN
, 3, { 0, 0, 0 }, 0 },
570 { SC_OPCODE_DB_PRODUCT
, ENTRY(SC_OPCODE_DB_PRODUCT_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBPRODUKT
, 3, { 0, 0, 0 }, 0 },
571 { SC_OPCODE_DB_STD_DEV
, ENTRY(SC_OPCODE_DB_STD_DEV_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBSTDABW
, 3, { 0, 0, 0 }, 0 },
572 { SC_OPCODE_DB_STD_DEV_P
, ENTRY(SC_OPCODE_DB_STD_DEV_P_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBSTDABWN
, 3, { 0, 0, 0 }, 0 },
573 { SC_OPCODE_DB_VAR
, ENTRY(SC_OPCODE_DB_VAR_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBVARIANZ
, 3, { 0, 0, 0 }, 0 },
574 { SC_OPCODE_DB_VAR_P
, ENTRY(SC_OPCODE_DB_VAR_P_ARY
), 0, ID_FUNCTION_GRP_DATABASE
, HID_FUNC_DBVARIANZEN
, 3, { 0, 0, 0 }, 0 },
575 { SC_OPCODE_INDIRECT
, ENTRY(SC_OPCODE_INDIRECT_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_INDIREKT
, 2, { 0, 1 }, 0 },
576 { SC_OPCODE_ADDRESS
, ENTRY(SC_OPCODE_ADDRESS_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_ADRESSE
, 5, { 0, 0, 1, 1, 1 }, 0 },
577 { SC_OPCODE_MATCH
, ENTRY(SC_OPCODE_MATCH_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_VERGLEICH
, 3, { 0, 0, 1 }, 0 },
578 { SC_OPCODE_COUNT_EMPTY_CELLS
, ENTRY(SC_OPCODE_COUNT_EMPTY_CELLS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ANZAHLLEEREZELLEN
, 1, { 0 }, 0 },
579 { SC_OPCODE_COUNT_IF
, ENTRY(SC_OPCODE_COUNT_IF_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ZAEHLENWENN
, 2, { 0, 0 }, 0 },
580 { SC_OPCODE_SUM_IF
, ENTRY(SC_OPCODE_SUM_IF_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_SUMMEWENN
, 3, { 0, 0, 1 }, 0 },
581 { SC_OPCODE_LOOKUP
, ENTRY(SC_OPCODE_LOOKUP_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_VERWEIS
, 3, { 0, 0, 1 }, 0 },
582 { SC_OPCODE_V_LOOKUP
, ENTRY(SC_OPCODE_V_LOOKUP_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_SVERWEIS
, 4, { 0, 0, 0, 1 }, 0 },
583 { SC_OPCODE_H_LOOKUP
, ENTRY(SC_OPCODE_H_LOOKUP_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_WVERWEIS
, 4, { 0, 0, 0, 1 }, 0 },
584 { SC_OPCODE_OFFSET
, ENTRY(SC_OPCODE_OFFSET_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_VERSCHIEBUNG
, 5, { 0, 0, 0, 1, 1 }, 0 },
585 { SC_OPCODE_INDEX
, ENTRY(SC_OPCODE_INDEX_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_INDEX
, 4, { 0, 1, 1, 1 }, 0 },
586 { SC_OPCODE_AREAS
, ENTRY(SC_OPCODE_AREAS_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_BEREICHE
, 1, { 0 }, 0 },
587 { SC_OPCODE_CURRENCY
, ENTRY(SC_OPCODE_CURRENCY_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_DM
, 2, { 0, 1 }, 0 },
588 { SC_OPCODE_REPLACE
, ENTRY(SC_OPCODE_REPLACE_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_ERSETZEN
, 4, { 0, 0, 0, 0 }, 0 },
589 { SC_OPCODE_FIXED
, ENTRY(SC_OPCODE_FIXED_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_FEST
, 3, { 0, 1, 1 }, 0 },
590 { SC_OPCODE_FIND
, ENTRY(SC_OPCODE_FIND_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_FINDEN
, 3, { 0, 0, 1 }, 0 },
591 { SC_OPCODE_EXACT
, ENTRY(SC_OPCODE_EXACT_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_IDENTISCH
, 2, { 0, 0 }, 0 },
592 { SC_OPCODE_LEFT
, ENTRY(SC_OPCODE_LEFT_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_LINKS
, 2, { 0, 1 }, 0 },
593 { SC_OPCODE_RIGHT
, ENTRY(SC_OPCODE_RIGHT_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_RECHTS
, 2, { 0, 1 }, 0 },
594 { SC_OPCODE_SEARCH
, ENTRY(SC_OPCODE_SEARCH_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_SUCHEN
, 3, { 0, 0, 1 }, 0 },
595 { SC_OPCODE_MID
, ENTRY(SC_OPCODE_MID_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_TEIL
, 3, { 0, 0, 0 }, 0 },
596 { SC_OPCODE_TEXT
, ENTRY(SC_OPCODE_TEXT_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_TEXT
, 2, { 0, 0 }, 0 },
597 { SC_OPCODE_SUBSTITUTE
, ENTRY(SC_OPCODE_SUBSTITUTE_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_WECHSELN
, 4, { 0, 0, 0, 1 }, 0 },
598 { SC_OPCODE_REPT
, ENTRY(SC_OPCODE_REPT_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_WIEDERHOLEN
, 2, { 0, 0 }, 0 },
599 { SC_OPCODE_CONCAT
, ENTRY(SC_OPCODE_CONCAT_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_VERKETTEN
, VAR_ARGS
, { 0 }, 0 },
600 { SC_OPCODE_MAT_DET
, ENTRY(SC_OPCODE_MAT_DET_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_MDET
, 1, { 0 }, 0 },
601 { SC_OPCODE_MAT_INV
, ENTRY(SC_OPCODE_MAT_INV_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_MINV
, 1, { 0 }, 0 },
602 { SC_OPCODE_MAT_MULT
, ENTRY(SC_OPCODE_MAT_MULT_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_MMULT
, 2, { 0, 0 }, 0 },
603 { SC_OPCODE_MAT_TRANS
, ENTRY(SC_OPCODE_MAT_TRANS_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_MTRANS
, 1, { 0 }, 0 },
604 { SC_OPCODE_MATRIX_UNIT
, ENTRY(SC_OPCODE_MATRIX_UNIT_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_EINHEITSMATRIX
, 1, { 0 }, 0 },
605 { SC_OPCODE_HYP_GEOM_DIST
, ENTRY(SC_OPCODE_HYP_GEOM_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_HYPGEOMVERT
, 5, { 0, 0, 0, 0, 1 }, 0 },
606 { SC_OPCODE_LOG_NORM_DIST
, ENTRY(SC_OPCODE_LOG_NORM_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_LOGNORMVERT
, 4, { 0, 1, 1, 1 }, 0 },
607 { SC_OPCODE_T_DIST
, ENTRY(SC_OPCODE_T_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TVERT
, 3, { 0, 0, 0 }, 0 },
608 { SC_OPCODE_F_DIST
, ENTRY(SC_OPCODE_F_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FVERT
, 3, { 0, 0, 0 }, 0 },
609 { SC_OPCODE_CHI_DIST
, ENTRY(SC_OPCODE_CHI_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHIVERT
, 2, { 0, 0 }, 0 },
610 { SC_OPCODE_WEIBULL
, ENTRY(SC_OPCODE_WEIBULL_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_WEIBULL
, 4, { 0, 0, 0, 0 }, 0 },
611 { SC_OPCODE_NEG_BINOM_VERT
, ENTRY(SC_OPCODE_NEG_BINOM_VERT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_NEGBINOMVERT
, 3, { 0, 0, 0 }, 0 },
612 { SC_OPCODE_CRIT_BINOM
, ENTRY(SC_OPCODE_CRIT_BINOM_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_KRITBINOM
, 3, { 0, 0, 0 }, 0 },
613 { SC_OPCODE_KURT
, ENTRY(SC_OPCODE_KURT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_KURT
, VAR_ARGS
, { 0 }, 0 },
614 { SC_OPCODE_HAR_MEAN
, ENTRY(SC_OPCODE_HAR_MEAN_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_HARMITTEL
, VAR_ARGS
, { 0 }, 0 },
615 { SC_OPCODE_GEO_MEAN
, ENTRY(SC_OPCODE_GEO_MEAN_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GEOMITTEL
, VAR_ARGS
, { 0 }, 0 },
616 { SC_OPCODE_STANDARD
, ENTRY(SC_OPCODE_STANDARD_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STANDARDISIERUNG
, 3, { 0, 0, 0 }, 0 },
617 { SC_OPCODE_AVE_DEV
, ENTRY(SC_OPCODE_AVE_DEV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MITTELABW
, VAR_ARGS
, { 0 }, 0 },
618 { SC_OPCODE_SKEW
, ENTRY(SC_OPCODE_SKEW_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_SCHIEFE
, VAR_ARGS
, { 0 }, 0 },
619 { SC_OPCODE_DEV_SQ
, ENTRY(SC_OPCODE_DEV_SQ_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_SUMQUADABW
, VAR_ARGS
, { 0 }, 0 },
620 { SC_OPCODE_MEDIAN
, ENTRY(SC_OPCODE_MEDIAN_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MEDIAN
, VAR_ARGS
, { 0 }, 0 },
621 { SC_OPCODE_MODAL_VALUE
, ENTRY(SC_OPCODE_MODAL_VALUE_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MODALWERT
, VAR_ARGS
, { 0 }, 0 },
622 { SC_OPCODE_Z_TEST
, ENTRY(SC_OPCODE_Z_TEST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GTEST
, 3, { 0, 0, 1 }, 0 },
623 { SC_OPCODE_T_TEST
, ENTRY(SC_OPCODE_T_TEST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TTEST
, 4, { 0, 0, 0, 0 }, 0 },
624 { SC_OPCODE_RANK
, ENTRY(SC_OPCODE_RANK_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_RANG
, 3, { 0, 0, 1 }, 0 },
625 { SC_OPCODE_PERCENTILE
, ENTRY(SC_OPCODE_PERCENTILE_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_QUANTIL
, 2, { 0, 0 }, 0 },
626 { SC_OPCODE_PERCENT_RANK
, ENTRY(SC_OPCODE_PERCENT_RANK_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_QUANTILSRANG
, 3, { 0, 0, 1 }, 0 },
627 { SC_OPCODE_LARGE
, ENTRY(SC_OPCODE_LARGE_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_KGROESSTE
, 2, { 0, 0 }, 0 },
628 { SC_OPCODE_SMALL
, ENTRY(SC_OPCODE_SMALL_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_KKLEINSTE
, 2, { 0, 0 }, 0 },
629 { SC_OPCODE_FREQUENCY
, ENTRY(SC_OPCODE_FREQUENCY_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_HAEUFIGKEIT
, 2, { 0, 0 }, 0 },
630 { SC_OPCODE_QUARTILE
, ENTRY(SC_OPCODE_QUARTILE_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_QUARTILE
, 2, { 0, 0 }, 0 },
631 { SC_OPCODE_NORM_INV
, ENTRY(SC_OPCODE_NORM_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_NORMINV
, 3, { 0, 0, 0 }, 0 },
632 { SC_OPCODE_CONFIDENCE
, ENTRY(SC_OPCODE_CONFIDENCE_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_KONFIDENZ
, 3, { 0, 0, 0 }, 0 },
633 { SC_OPCODE_F_TEST
, ENTRY(SC_OPCODE_F_TEST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FTEST
, 2, { 0, 0 }, 0 },
634 { SC_OPCODE_TRIM_MEAN
, ENTRY(SC_OPCODE_TRIM_MEAN_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GESTUTZTMITTEL
, 2, { 0, 0 }, 0 },
635 { SC_OPCODE_PROB
, ENTRY(SC_OPCODE_PROB_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_WAHRSCHBEREICH
, 4, { 0, 0, 0, 1 }, 0 },
636 { SC_OPCODE_CORREL
, ENTRY(SC_OPCODE_CORREL_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_KORREL
, 2, { 0, 0 }, 0 },
637 { SC_OPCODE_COVAR
, ENTRY(SC_OPCODE_COVAR_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_KOVAR
, 2, { 0, 0 }, 0 },
638 { SC_OPCODE_PEARSON
, ENTRY(SC_OPCODE_PEARSON_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_PEARSON
, 2, { 0, 0 }, 0 },
639 { SC_OPCODE_RSQ
, ENTRY(SC_OPCODE_RSQ_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_BESTIMMTHEITSMASS
, 2, { 0, 0 }, 0 },
640 { SC_OPCODE_STEYX
, ENTRY(SC_OPCODE_STEYX_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STFEHLERYX
, 2, { 0, 0 }, 0 },
641 { SC_OPCODE_SLOPE
, ENTRY(SC_OPCODE_SLOPE_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STEIGUNG
, 2, { 0, 0 }, 0 },
642 { SC_OPCODE_INTERCEPT
, ENTRY(SC_OPCODE_INTERCEPT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ACHSENABSCHNITT
, 2, { 0, 0 }, 0 },
643 { SC_OPCODE_TREND
, ENTRY(SC_OPCODE_TREND_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_TREND
, 4, { 0, 1, 1, 1 }, 0 },
644 { SC_OPCODE_GROWTH
, ENTRY(SC_OPCODE_GROWTH_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_VARIATION
, 4, { 0, 1, 1, 1 }, 0 },
645 { SC_OPCODE_LINEST
, ENTRY(SC_OPCODE_LINEST_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_RGP
, 4, { 0, 1, 1, 1 }, 0 },
646 { SC_OPCODE_LOGEST
, ENTRY(SC_OPCODE_LOGEST_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_RKP
, 4, { 0, 1, 1, 1 }, 0 },
647 { SC_OPCODE_FORECAST
, ENTRY(SC_OPCODE_FORECAST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_SCHAETZER
, 3, { 0, 0, 0 }, 0 },
648 { SC_OPCODE_CHI_INV
, ENTRY(SC_OPCODE_CHI_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHIINV
, 2, { 0, 0 }, 0 },
649 { SC_OPCODE_GAMMA_DIST
, ENTRY(SC_OPCODE_GAMMA_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GAMMAVERT
, 4, { 0, 0, 0, 1 }, 0 },
650 { SC_OPCODE_GAMMA_INV
, ENTRY(SC_OPCODE_GAMMA_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GAMMAINV
, 3, { 0, 0, 0 }, 0 },
651 { SC_OPCODE_T_INV
, ENTRY(SC_OPCODE_T_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TINV
, 2, { 0, 0 }, 0 },
652 { SC_OPCODE_F_INV
, ENTRY(SC_OPCODE_F_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FINV
, 3, { 0, 0, 0 }, 0 },
653 { SC_OPCODE_CHI_TEST
, ENTRY(SC_OPCODE_CHI_TEST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHITEST
, 2, { 0, 0 }, 0 },
654 { SC_OPCODE_LOG_INV
, ENTRY(SC_OPCODE_LOG_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_LOGINV
, 3, { 0, 1, 1 }, 0 },
655 { SC_OPCODE_BETA_DIST
, ENTRY(SC_OPCODE_BETA_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_BETAVERT
, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
656 { SC_OPCODE_BETA_INV
, ENTRY(SC_OPCODE_BETA_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_BETAINV
, 5, { 0, 0, 0, 1, 1 }, 0 },
657 { SC_OPCODE_WEEK
, ENTRY(SC_OPCODE_WEEK_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_KALENDERWOCHE
, 2, { 0, 1 }, 0 },
658 { SC_OPCODE_GET_DAY_OF_WEEK
, ENTRY(SC_OPCODE_GET_DAY_OF_WEEK_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_WOCHENTAG
, 2, { 0, 1 }, 0 },
659 { SC_OPCODE_STYLE
, ENTRY(SC_OPCODE_STYLE_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_VORLAGE
, 3, { 0, 1, 1 }, 0 },
660 { SC_OPCODE_DDE
, ENTRY(SC_OPCODE_DDE_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_DDE
, 4, { 0, 0, 0, 1 }, 0 },
661 { SC_OPCODE_BASE
, ENTRY(SC_OPCODE_BASE_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_BASIS
, 3, { 0, 0, 1 }, 0 },
662 { SC_OPCODE_SHEET
, ENTRY(SC_OPCODE_SHEET_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_TABELLE
, 1, { 1 }, 0 },
663 { SC_OPCODE_SHEETS
, ENTRY(SC_OPCODE_SHEETS_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_TABELLEN
, 1, { 1 }, 0 },
664 { SC_OPCODE_MIN_A
, ENTRY(SC_OPCODE_MIN_A_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MINA
, VAR_ARGS
, { 0 }, 0 },
665 { SC_OPCODE_MAX_A
, ENTRY(SC_OPCODE_MAX_A_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MAXA
, VAR_ARGS
, { 0 }, 0 },
666 { SC_OPCODE_AVERAGE_A
, ENTRY(SC_OPCODE_AVERAGE_A_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MITTELWERTA
, VAR_ARGS
, { 0 }, 0 },
667 { SC_OPCODE_ST_DEV_A
, ENTRY(SC_OPCODE_ST_DEV_A_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STABWA
, VAR_ARGS
, { 0 }, 0 },
668 { SC_OPCODE_ST_DEV_P_A
, ENTRY(SC_OPCODE_ST_DEV_P_A_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STABWNA
, VAR_ARGS
, { 0 }, 0 },
669 { SC_OPCODE_VAR_A
, ENTRY(SC_OPCODE_VAR_A_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_VARIANZA
, VAR_ARGS
, { 0 }, 0 },
670 { SC_OPCODE_VAR_P_A
, ENTRY(SC_OPCODE_VAR_P_A_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_VARIANZENA
, VAR_ARGS
, { 0 }, 0 },
671 { SC_OPCODE_EASTERSUNDAY
, ENTRY(SC_OPCODE_EASTERSUNDAY_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_OSTERSONNTAG
, 1, { 0 }, 0 },
672 { SC_OPCODE_DECIMAL
, ENTRY(SC_OPCODE_DECIMAL_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_DEZIMAL
, 2, { 0, 0 }, 0 },
673 { SC_OPCODE_CONVERT_OOO
, ENTRY(SC_OPCODE_CONVERT_OOO_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_UMRECHNEN
, 3, { 0, 0, 0 }, 0 },
674 { SC_OPCODE_ROMAN
, ENTRY(SC_OPCODE_ROMAN_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_ROEMISCH
, 2, { 0, 1 }, 0 },
675 { SC_OPCODE_MIRR
, ENTRY(SC_OPCODE_MIRR_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_QIKV
, 3, { 0, 0, 0 }, 0 },
676 { SC_OPCODE_CELL
, ENTRY(SC_OPCODE_CELL_ARY
), 0, ID_FUNCTION_GRP_INFO
, HID_FUNC_ZELLE
, 2, { 0, 1 }, 0 },
677 { SC_OPCODE_ISPMT
, ENTRY(SC_OPCODE_ISPMT_ARY
), 0, ID_FUNCTION_GRP_FINANCIAL
, HID_FUNC_ISPMT
, 4, { 0, 0, 0, 0 }, 0 },
678 { SC_OPCODE_HYPERLINK
, ENTRY(SC_OPCODE_HYPERLINK_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_HYPERLINK
, 2, { 0, 1 }, 0 },
679 { SC_OPCODE_X_LOOKUP
, ENTRY(SC_OPCODE_X_LOOKUP_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_XLOOKUP_MS
, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
680 { SC_OPCODE_X_MATCH
, ENTRY(SC_OPCODE_X_MATCH_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_XMATCH_MS
, 4, { 0, 0, 1, 1 }, 0 },
681 { SC_OPCODE_GET_PIVOT_DATA
, ENTRY(SC_OPCODE_GET_PIVOT_DATA_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_GETPIVOTDATA
, VAR_ARGS
+2, { 0, 0, 1 }, 0 },
682 { SC_OPCODE_EUROCONVERT
, ENTRY(SC_OPCODE_EUROCONVERT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_EUROCONVERT
, 5, { 0, 0, 0, 1, 1 }, 0 },
683 { SC_OPCODE_NUMBERVALUE
, ENTRY(SC_OPCODE_NUMBERVALUE_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_NUMBERVALUE
, 3, { 0, 1, 1 }, 0 },
684 { SC_OPCODE_CHISQ_DIST
, ENTRY(SC_OPCODE_CHISQ_DIST_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHISQDIST
, 3, { 0, 0, 1 }, 0 },
685 { SC_OPCODE_CHISQ_INV
, ENTRY(SC_OPCODE_CHISQ_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHISQINV
, 2, { 0, 0 }, 0 },
686 { SC_OPCODE_BITAND
, ENTRY(SC_OPCODE_BITAND_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_BITAND
, 2, { 0, 0 }, 0 },
687 { SC_OPCODE_BITOR
, ENTRY(SC_OPCODE_BITOR_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_BITOR
, 2, { 0, 0 }, 0 },
688 { SC_OPCODE_BITXOR
, ENTRY(SC_OPCODE_BITXOR_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_BITXOR
, 2, { 0, 0 }, 0 },
689 { SC_OPCODE_BITRSHIFT
, ENTRY(SC_OPCODE_BITRSHIFT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_BITRSHIFT
, 2, { 0, 0 }, 0 },
690 { SC_OPCODE_BITLSHIFT
, ENTRY(SC_OPCODE_BITLSHIFT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_BITLSHIFT
, 2, { 0, 0 }, 0 },
691 { SC_OPCODE_GET_DATEDIF
, ENTRY(SC_OPCODE_GET_DATEDIF_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_DATEDIF
, 3, { 0, 0, 0 }, 0 },
692 { SC_OPCODE_XOR
, ENTRY(SC_OPCODE_XOR_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_XOR
, VAR_ARGS
, { 0 }, 0 },
693 { SC_OPCODE_AVERAGE_IF
, ENTRY(SC_OPCODE_AVERAGE_IF_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_AVERAGEIF
, 3, { 0, 0, 1 }, 0 },
694 { SC_OPCODE_SUM_IFS
, ENTRY(SC_OPCODE_SUM_IFS_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_SUMIFS
, PAIRED_VAR_ARGS
+1, { 0, 0, 0 }, 0 },
695 { SC_OPCODE_AVERAGE_IFS
, ENTRY(SC_OPCODE_AVERAGE_IFS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_AVERAGEIFS
, PAIRED_VAR_ARGS
+1, { 0, 0, 0 }, 0 },
696 { SC_OPCODE_COUNT_IFS
, ENTRY(SC_OPCODE_COUNT_IFS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_COUNTIFS
, PAIRED_VAR_ARGS
, { 0, 0 }, 0 },
697 { SC_OPCODE_SKEWP
, ENTRY(SC_OPCODE_SKEWP_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_SKEWP
, VAR_ARGS
, { 0 }, 0 },
698 { SC_OPCODE_LENB
, ENTRY(SC_OPCODE_LENB_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_LENB
, 1, { 0 }, 0 },
699 { SC_OPCODE_RIGHTB
, ENTRY(SC_OPCODE_RIGHTB_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_RIGHTB
, 2, { 0, 1 }, 0 },
700 { SC_OPCODE_LEFTB
, ENTRY(SC_OPCODE_LEFTB_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_LEFTB
, 2, { 0, 1 }, 0 },
701 { SC_OPCODE_MIDB
, ENTRY(SC_OPCODE_MIDB_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_MIDB
, 3, { 0, 0, 0 }, 0 },
702 { SC_OPCODE_FILTERXML
, ENTRY(SC_OPCODE_FILTERXML_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_FILTERXML
, 2, { 0, 0 }, 0 },
703 { SC_OPCODE_WEBSERVICE
, ENTRY(SC_OPCODE_WEBSERVICE_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_WEBSERVICE
, 1, { 0, 0 }, 0 },
704 { SC_OPCODE_COVARIANCE_S
, ENTRY(SC_OPCODE_COVARIANCE_S_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_COVARIANCE_S
, 2, { 0, 0 }, 0 },
705 { SC_OPCODE_COVARIANCE_P
, ENTRY(SC_OPCODE_COVARIANCE_P_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_COVARIANCE_P
, 2, { 0, 0 }, 0 },
706 { SC_OPCODE_ST_DEV_P_MS
, ENTRY(SC_OPCODE_ST_DEV_P_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ST_DEV_P_MS
, VAR_ARGS
, { 0 }, 0 },
707 { SC_OPCODE_ST_DEV_S
, ENTRY(SC_OPCODE_ST_DEV_S_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_ST_DEV_S
, VAR_ARGS
, { 0 }, 0 },
708 { SC_OPCODE_VAR_P_MS
, ENTRY(SC_OPCODE_VAR_P_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_VAR_P_MS
, VAR_ARGS
, { 0 }, 0 },
709 { SC_OPCODE_VAR_S
, ENTRY(SC_OPCODE_VAR_S_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_VAR_S
, VAR_ARGS
, { 0 }, 0 },
710 { SC_OPCODE_BETA_DIST_MS
, ENTRY(SC_OPCODE_BETA_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_BETADIST_MS
, 6, { 0, 0, 0, 0, 1, 1 }, 0 },
711 { SC_OPCODE_BETA_INV_MS
, ENTRY(SC_OPCODE_BETA_INV_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_BETAINV_MS
, 5, { 0, 0, 0, 1, 1 }, 0 },
712 { SC_OPCODE_BINOM_DIST_MS
, ENTRY(SC_OPCODE_BINOM_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_BINOM_DIST_MS
, 4, { 0, 0, 0, 0 }, 0 },
713 { SC_OPCODE_BINOM_INV
, ENTRY(SC_OPCODE_BINOM_INV_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_BINOM_INV_MS
, 3, { 0, 0, 0 }, 0 },
714 { SC_OPCODE_CHI_DIST_MS
, ENTRY(SC_OPCODE_CHI_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHIVERT_MS
, 2, { 0, 0 }, 0 },
715 { SC_OPCODE_CHI_INV_MS
, ENTRY(SC_OPCODE_CHI_INV_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHIINV_MS
, 2, { 0, 0 }, 0 },
716 { SC_OPCODE_CHI_TEST_MS
, ENTRY(SC_OPCODE_CHI_TEST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHITEST_MS
, 2, { 0, 0 }, 0 },
717 { SC_OPCODE_CHISQ_DIST_MS
, ENTRY(SC_OPCODE_CHISQ_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHISQDIST_MS
, 3, { 0, 0, 0 }, 0 },
718 { SC_OPCODE_CHISQ_INV_MS
, ENTRY(SC_OPCODE_CHISQ_INV_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CHISQINV_MS
, 2, { 0, 0 }, 0 },
719 { SC_OPCODE_CONFIDENCE_N
, ENTRY(SC_OPCODE_CONFIDENCE_N_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CONFIDENCE_N
, 3, { 0, 0, 0 }, 0 },
720 { SC_OPCODE_CONFIDENCE_T
, ENTRY(SC_OPCODE_CONFIDENCE_T_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_CONFIDENCE_T
, 3, { 0, 0, 0 }, 0 },
721 { SC_OPCODE_F_DIST_LT
, ENTRY(SC_OPCODE_F_DIST_LT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_F_DIST_LT
, 4, { 0, 0, 0, 1 }, 0 },
722 { SC_OPCODE_F_DIST_RT
, ENTRY(SC_OPCODE_F_DIST_RT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_F_DIST_RT
, 3, { 0, 0, 0 }, 0 },
723 { SC_OPCODE_F_INV_LT
, ENTRY(SC_OPCODE_F_INV_LT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_F_INV_LT
, 3, { 0, 0, 0 }, 0 },
724 { SC_OPCODE_F_INV_RT
, ENTRY(SC_OPCODE_F_INV_RT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_F_INV_RT
, 3, { 0, 0, 0 }, 0 },
725 { SC_OPCODE_F_TEST_MS
, ENTRY(SC_OPCODE_F_TEST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_F_TEST_MS
, 2, { 0, 0 }, 0 },
726 { SC_OPCODE_EXP_DIST_MS
, ENTRY(SC_OPCODE_EXP_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_EXP_DIST_MS
, 3, { 0, 0, 0 }, 0 },
727 { SC_OPCODE_HYP_GEOM_DIST_MS
, ENTRY(SC_OPCODE_HYP_GEOM_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_HYP_GEOM_DIST_MS
, 5, { 0, 0, 0, 0, 0 }, 0 },
728 { SC_OPCODE_POISSON_DIST_MS
, ENTRY(SC_OPCODE_POISSON_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_POISSON_DIST_MS
, 3, { 0, 0, 0 }, 0 },
729 { SC_OPCODE_WEIBULL_MS
, ENTRY(SC_OPCODE_WEIBULL_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_WEIBULL_DIST_MS
, 4, { 0, 0, 0, 0 }, 0 },
730 { SC_OPCODE_GAMMA_DIST_MS
, ENTRY(SC_OPCODE_GAMMA_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GAMMADIST_MS
, 4, { 0, 0, 0, 0 }, 0 },
731 { SC_OPCODE_GAMMA_INV_MS
, ENTRY(SC_OPCODE_GAMMA_INV_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_GAMMAINV_MS
, 3, { 0, 0, 0 }, 0 },
732 { SC_OPCODE_LOG_NORM_DIST_MS
, ENTRY(SC_OPCODE_LOG_NORM_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_LOGNORMDIST_MS
, 4, { 0, 0, 0, 0 }, 0 },
733 { SC_OPCODE_LOG_INV_MS
, ENTRY(SC_OPCODE_LOG_INV_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_LOGINV
, 3, { 0, 0, 0 }, 0 },
734 { SC_OPCODE_NORM_DIST_MS
, ENTRY(SC_OPCODE_NORM_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_NORMDIST_MS
, 4, { 0, 0, 0, 0 }, 0 },
735 { SC_OPCODE_NORM_INV_MS
, ENTRY(SC_OPCODE_NORM_INV_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_NORMINV_MS
, 3, { 0, 0, 0 }, 0 },
736 { SC_OPCODE_STD_NORM_DIST_MS
, ENTRY(SC_OPCODE_STD_NORM_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STD_NORMDIST_MS
, 2, { 0, 0 }, 0 },
737 { SC_OPCODE_S_NORM_INV_MS
, ENTRY(SC_OPCODE_S_NORM_INV_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_STD_NORMINV_MS
, 1, { 0 }, 0 },
738 { SC_OPCODE_T_DIST_MS
, ENTRY(SC_OPCODE_T_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TDIST_MS
, 3, { 0, 0, 0 }, 0 },
739 { SC_OPCODE_T_DIST_RT
, ENTRY(SC_OPCODE_T_DIST_RT_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TDIST_RT
, 2, { 0, 0 }, 0 },
740 { SC_OPCODE_T_DIST_2T
, ENTRY(SC_OPCODE_T_DIST_2T_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TDIST_2T
, 2, { 0, 0 }, 0 },
741 { SC_OPCODE_T_INV_2T
, ENTRY(SC_OPCODE_T_INV_2T_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TINV_2T
, 2, { 0, 0 }, 0 },
742 { SC_OPCODE_T_INV_MS
, ENTRY(SC_OPCODE_T_INV_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TINV_MS
, 2, { 0, 0 }, 0 },
743 { SC_OPCODE_T_TEST_MS
, ENTRY(SC_OPCODE_T_TEST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_TTEST_MS
, 4, { 0, 0, 0, 0 }, 0 },
744 { SC_OPCODE_PERCENTILE_INC
, ENTRY(SC_OPCODE_PERCENTILE_INC_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_PERCENTILE_INC
, 2, { 0, 0 }, 0 },
745 { SC_OPCODE_PERCENT_RANK_INC
, ENTRY(SC_OPCODE_PERCENT_RANK_INC_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_PERCENTRANK_INC
, 3, { 0, 0, 1 }, 0 },
746 { SC_OPCODE_QUARTILE_INC
, ENTRY(SC_OPCODE_QUARTILE_INC_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_QUARTILE_INC
, 2, { 0, 0 }, 0 },
747 { SC_OPCODE_RANK_EQ
, ENTRY(SC_OPCODE_RANK_EQ_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_RANK_EQ
, 3, { 0, 0, 1 }, 0 },
748 { SC_OPCODE_PERCENTILE_EXC
, ENTRY(SC_OPCODE_PERCENTILE_EXC_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_PERCENTILE_EXC
, 2, { 0, 0 }, 0 },
749 { SC_OPCODE_PERCENT_RANK_EXC
, ENTRY(SC_OPCODE_PERCENT_RANK_EXC_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_PERCENTRANK_EXC
, 3, { 0, 0, 1 }, 0 },
750 { SC_OPCODE_QUARTILE_EXC
, ENTRY(SC_OPCODE_QUARTILE_EXC_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_QUARTILE_EXC
, 2, { 0, 0 }, 0 },
751 { SC_OPCODE_RANK_AVG
, ENTRY(SC_OPCODE_RANK_AVG_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_RANK_AVG
, 3, { 0, 0, 1 }, 0 },
752 { SC_OPCODE_MODAL_VALUE_MS
, ENTRY(SC_OPCODE_MODAL_VALUE_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MODAL_VALUE_MS
, VAR_ARGS
, { 0 }, 0 },
753 { SC_OPCODE_MODAL_VALUE_MULTI
, ENTRY(SC_OPCODE_MODAL_VALUE_MULTI_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MODAL_VALUE_MULTI
, VAR_ARGS
, { 0 }, 0 },
754 { SC_OPCODE_NEG_BINOM_DIST_MS
, ENTRY(SC_OPCODE_NEG_BINOM_DIST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_NEGBINOMDIST_MS
, 4, { 0, 0, 0, 0 }, 0 },
755 { SC_OPCODE_Z_TEST_MS
, ENTRY(SC_OPCODE_Z_TEST_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_Z_TEST_MS
, 3, { 0, 0, 1 }, 0 },
756 { SC_OPCODE_CEIL_MS
, ENTRY(SC_OPCODE_CEIL_MS_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_CEIL_MS
, 2, { 0, 0 }, 0 },
757 { SC_OPCODE_CEIL_ISO
, ENTRY(SC_OPCODE_CEIL_ISO_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_CEIL_ISO
, 2, { 0, 1 }, 0 },
758 { SC_OPCODE_FLOOR_MS
, ENTRY(SC_OPCODE_FLOOR_MS_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_FLOOR_MS
, 2, { 0, 0 }, 0 },
759 { SC_OPCODE_NETWORKDAYS_MS
, ENTRY(SC_OPCODE_NETWORKDAYS_MS_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_NETWORKDAYS_MS
, 4, { 0, 0, 1, 1 }, 0 },
760 { SC_OPCODE_WORKDAY_MS
, ENTRY(SC_OPCODE_WORKDAY_MS_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_WORKDAY_MS
, 4, { 0, 0, 1, 1 }, 0 },
761 { SC_OPCODE_AGGREGATE
, ENTRY(SC_OPCODE_AGGREGATE_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_AGGREGATE
, VAR_ARGS
+3, { 0, 0, 0, 1 }, 0 },
762 { SC_OPCODE_COLOR
, ENTRY(SC_OPCODE_COLOR_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_COLOR
, 4, { 0, 0, 0, 1 }, 0 },
763 { SC_OPCODE_CEIL_MATH
, ENTRY(SC_OPCODE_CEIL_MATH_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_CEIL_MATH
, 3, { 0, 1, 1 }, 0 },
764 { SC_OPCODE_CEIL_PRECISE
, ENTRY(SC_OPCODE_CEIL_PRECISE_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_CEIL_PRECISE
, 2, { 0, 1 }, 0 },
765 { SC_OPCODE_NETWORKDAYS
, ENTRY(SC_OPCODE_NETWORKDAYS_ARY
), 0, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_NETWORKDAYS
, 4, { 0, 0, 1, 1 }, 0 },
766 { SC_OPCODE_FLOOR_MATH
, ENTRY(SC_OPCODE_FLOOR_MATH_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_FLOOR_MATH
, 3, { 0, 1, 1 }, 0 },
767 { SC_OPCODE_FLOOR_PRECISE
, ENTRY(SC_OPCODE_FLOOR_PRECISE_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_FLOOR_PRECISE
, 2, { 0, 1 }, 0 },
768 { SC_OPCODE_RAWSUBTRACT
, ENTRY(SC_OPCODE_RAWSUBTRACT_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_RAWSUBTRACT
, VAR_ARGS
+2, { 0, 0, 1 }, 0 },
769 { SC_OPCODE_WEEKNUM_OOO
, ENTRY(SC_OPCODE_WEEKNUM_OOO_ARY
), 2, ID_FUNCTION_GRP_DATETIME
, HID_FUNC_WEEKNUM_OOO
, 2, { 0, 0 }, 0 },
770 { SC_OPCODE_FORECAST_ETS_ADD
, ENTRY(SC_OPCODE_FORECAST_ETS_ADD_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FORECAST_ETS_ADD
, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
771 { SC_OPCODE_FORECAST_ETS_SEA
, ENTRY(SC_OPCODE_FORECAST_ETS_SEA_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FORECAST_ETS_SEA
, 4, { 0, 0, 1, 1 }, 0 },
772 { SC_OPCODE_FORECAST_ETS_MUL
, ENTRY(SC_OPCODE_FORECAST_ETS_MUL_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FORECAST_ETS_MUL
, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
773 { SC_OPCODE_FORECAST_ETS_PIA
, ENTRY(SC_OPCODE_FORECAST_ETS_PIA_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FORECAST_ETS_PIA
, 7, { 0, 0, 0, 1, 1, 1, 1 }, 0 },
774 { SC_OPCODE_FORECAST_ETS_PIM
, ENTRY(SC_OPCODE_FORECAST_ETS_PIM_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FORECAST_ETS_PIM
, 7, { 0, 0, 0, 1, 1, 1, 1 }, 0 },
775 { SC_OPCODE_FORECAST_ETS_STA
, ENTRY(SC_OPCODE_FORECAST_ETS_STA_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FORECAST_ETS_STA
, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
776 { SC_OPCODE_FORECAST_ETS_STM
, ENTRY(SC_OPCODE_FORECAST_ETS_STM_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FORECAST_ETS_STM
, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
777 { SC_OPCODE_FORECAST_LIN
, ENTRY(SC_OPCODE_FORECAST_LIN_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_FORECAST_LIN
, 3, { 0, 0, 0 }, 0 },
778 { SC_OPCODE_CONCAT_MS
, ENTRY(SC_OPCODE_CONCAT_MS_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_CONCAT_MS
, VAR_ARGS
, { 0 }, 0 },
779 { SC_OPCODE_TEXTJOIN_MS
, ENTRY(SC_OPCODE_TEXTJOIN_MS_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_TEXTJOIN_MS
, VAR_ARGS
+ 2, { 0, 0, 0 }, 0 },
780 { SC_OPCODE_IFS_MS
, ENTRY(SC_OPCODE_IFS_MS_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_IFS_MS
, PAIRED_VAR_ARGS
, { 0, 0 }, 0 },
781 { SC_OPCODE_SWITCH_MS
, ENTRY(SC_OPCODE_SWITCH_MS_ARY
), 0, ID_FUNCTION_GRP_LOGIC
, HID_FUNC_SWITCH_MS
, PAIRED_VAR_ARGS
+ 1, { 0, 0, 0 }, 0 },
782 { SC_OPCODE_MINIFS_MS
, ENTRY(SC_OPCODE_MINIFS_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MINIFS_MS
, PAIRED_VAR_ARGS
+ 1, { 0, 0, 0 }, 0 },
783 { SC_OPCODE_MAXIFS_MS
, ENTRY(SC_OPCODE_MAXIFS_MS_ARY
), 0, ID_FUNCTION_GRP_STATISTIC
, HID_FUNC_MAXIFS_MS
, PAIRED_VAR_ARGS
+ 1, { 0, 0, 0 }, 0 },
784 { SC_OPCODE_ROUNDSIG
, ENTRY(SC_OPCODE_ROUNDSIG_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_ROUNDSIG
, 2, { 0, 0 }, 0 },
785 { SC_OPCODE_REPLACEB
, ENTRY(SC_OPCODE_REPLACEB_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_REPLACEB
, 4, { 0, 0, 0, 0 }, 0 },
786 { SC_OPCODE_FINDB
, ENTRY(SC_OPCODE_FINDB_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_FINDB
, 3, { 0, 0, 1 }, 0 },
787 { SC_OPCODE_SEARCHB
, ENTRY(SC_OPCODE_SEARCHB_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_SEARCHB
, 3, { 0, 0, 1 }, 0 },
788 { SC_OPCODE_REGEX
, ENTRY(SC_OPCODE_REGEX_ARY
), 0, ID_FUNCTION_GRP_TEXT
, HID_FUNC_REGEX
, 4, { 0, 0, 1, 1 }, 0 },
789 { SC_OPCODE_FOURIER
, ENTRY(SC_OPCODE_FOURIER_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_FOURIER
, 5, { 0, 0, 1, 1, 1 }, 0 },
790 { SC_OPCODE_RANDBETWEEN_NV
, ENTRY(SC_OPCODE_RANDBETWEEN_NV_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_RANDBETWEEN_NV
, 2, { 0, 0 }, 0 },
791 { SC_OPCODE_FILTER
, ENTRY(SC_OPCODE_FILTER_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_FILTER_MS
, 3, { 0, 0, 1 }, 0 },
792 { SC_OPCODE_SORT
, ENTRY(SC_OPCODE_SORT_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_SORT_MS
, 4, { 0, 1, 1, 1 }, 0 },
793 { SC_OPCODE_SORTBY
, ENTRY(SC_OPCODE_SORTBY_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_SORTBY_MS
, PAIRED_VAR_ARGS
+ 1, { 0, 0, 1 }, 0 },
794 { SC_OPCODE_MAT_SEQUENCE
, ENTRY(SC_OPCODE_MAT_SEQUENCE_ARY
), 0, ID_FUNCTION_GRP_MATRIX
, HID_FUNC_MSEQUENCE_MS
, 4, { 0, 1, 1, 1 }, 0 },
795 { SC_OPCODE_RANDARRAY
, ENTRY(SC_OPCODE_RANDARRAY_ARY
), 0, ID_FUNCTION_GRP_MATH
, HID_FUNC_RANDARRAY_MS
, 5, { 1, 1, 1, 1, 1 }, 0 },
796 { SC_OPCODE_UNIQUE
, ENTRY(SC_OPCODE_UNIQUE_ARY
), 0, ID_FUNCTION_GRP_TABLE
, HID_FUNC_UNIQUE_MS
, 3, { 0, 1, 1 }, 0 },
799 ScFuncDesc
* pDesc
= nullptr;
800 sal_Int32 nStrLen
= 0;
801 ::std::vector
<const ScFuncDesc
*> tmpFuncVector
;
803 // Browse for all possible OpCodes. This is not the fastest method, but
804 // otherwise the sub resources within the resource blocks and the
805 // resource blocks themselves would had to be ordered according to
806 // OpCodes, which is utopian...
807 ScFuncDescCore
const * pDescsEnd
= aDescs
+ SAL_N_ELEMENTS(aDescs
);
808 for (sal_uInt16 i
= 0; i
<= SC_OPCODE_LAST_OPCODE_ID
; ++i
)
810 const ScFuncDescCore
*pEntry
= std::lower_bound(aDescs
, pDescsEnd
, i
,
811 [](const ScFuncDescCore
&rItem
, sal_uInt16 key
)
813 return rItem
.nOpCode
< key
;
817 // Opcode Resource available?
818 if (pEntry
!= pDescsEnd
&& pEntry
->nOpCode
== i
&& pEntry
->pResource
)
820 pDesc
= new ScFuncDesc
;
821 bool bSuppressed
= false;
823 ScFuncRes(*pEntry
, pDesc
, bSuppressed
);
824 // Instead of dealing with this exceptional case at 1001 places
825 // we simply don't add an entirely suppressed function to the
826 // list and delete it.
832 tmpFuncVector
.push_back(pDesc
);
834 nStrLen
= pDesc
->mxFuncName
->getLength();
835 if (nStrLen
> nMaxFuncNameLen
)
836 nMaxFuncNameLen
= nStrLen
;
841 // legacy binary AddIn functions
843 sal_uInt16 nNextId
= SC_OPCODE_LAST_OPCODE_ID
+ 1; // FuncID for AddIn functions
845 // Interpretation of AddIn list
846 OUString aDefArgNameValue
= u
"value"_ustr
;
847 OUString aDefArgNameString
= u
"string"_ustr
;
848 OUString aDefArgNameValues
= u
"values"_ustr
;
849 OUString aDefArgNameStrings
= u
"strings"_ustr
;
850 OUString aDefArgNameCells
= u
"cells"_ustr
;
851 OUString aDefArgNameNone
= u
"none"_ustr
;
852 OUString aDefArgDescValue
= u
"a value"_ustr
;
853 OUString aDefArgDescString
= u
"a string"_ustr
;
854 OUString aDefArgDescValues
= u
"array of values"_ustr
;
855 OUString aDefArgDescStrings
= u
"array of strings"_ustr
;
856 OUString aDefArgDescCells
= u
"range of cells"_ustr
;
857 OUString aDefArgDescNone
= u
"none"_ustr
;
859 OUString aArgName
, aArgDesc
;
860 const LegacyFuncCollection
& rLegacyFuncColl
= *ScGlobal::GetLegacyFuncCollection();
861 for (auto const& legacyFunc
: rLegacyFuncColl
)
863 const LegacyFuncData
*const pLegacyFuncData
= legacyFunc
.second
.get();
864 pDesc
= new ScFuncDesc
;
865 sal_uInt16 nArgs
= pLegacyFuncData
->GetParamCount() - 1;
866 pLegacyFuncData
->getParamDesc( aArgName
, aArgDesc
, 0 );
867 pDesc
->nFIndex
= nNextId
++; // ??? OpCode vergeben
868 pDesc
->nCategory
= ID_FUNCTION_GRP_ADDINS
;
869 pDesc
->mxFuncName
= pLegacyFuncData
->GetInternalName().toAsciiUpperCase();
870 pDesc
->mxFuncDesc
= aArgDesc
+ "\n"
871 "( AddIn: " + pLegacyFuncData
->GetModuleName() + " )";
872 pDesc
->nArgCount
= nArgs
;
875 pDesc
->maDefArgNames
.clear();
876 pDesc
->maDefArgNames
.resize(nArgs
);
877 pDesc
->maDefArgDescs
.clear();
878 pDesc
->maDefArgDescs
.resize(nArgs
);
879 pDesc
->pDefArgFlags
= new ScFuncDesc::ParameterFlags
[nArgs
];
880 for (sal_uInt16 j
= 0; j
< nArgs
; ++j
)
882 pDesc
->pDefArgFlags
[j
].bOptional
= false;
883 pLegacyFuncData
->getParamDesc( aArgName
, aArgDesc
, j
+1 );
884 if ( !aArgName
.isEmpty() )
885 pDesc
->maDefArgNames
[j
] = aArgName
;
888 switch (pLegacyFuncData
->GetParamType(j
+1))
890 case ParamType::PTR_DOUBLE
:
891 pDesc
->maDefArgNames
[j
] = aDefArgNameValue
;
893 case ParamType::PTR_STRING
:
894 pDesc
->maDefArgNames
[j
] = aDefArgNameString
;
896 case ParamType::PTR_DOUBLE_ARR
:
897 pDesc
->maDefArgNames
[j
] = aDefArgNameValues
;
899 case ParamType::PTR_STRING_ARR
:
900 pDesc
->maDefArgNames
[j
] = aDefArgNameStrings
;
902 case ParamType::PTR_CELL_ARR
:
903 pDesc
->maDefArgNames
[j
] = aDefArgNameCells
;
906 pDesc
->maDefArgNames
[j
] = aDefArgNameNone
;
910 if ( !aArgDesc
.isEmpty() )
911 pDesc
->maDefArgDescs
[j
] = aArgDesc
;
914 switch (pLegacyFuncData
->GetParamType(j
+1))
916 case ParamType::PTR_DOUBLE
:
917 pDesc
->maDefArgDescs
[j
] = aDefArgDescValue
;
919 case ParamType::PTR_STRING
:
920 pDesc
->maDefArgDescs
[j
] = aDefArgDescString
;
922 case ParamType::PTR_DOUBLE_ARR
:
923 pDesc
->maDefArgDescs
[j
] = aDefArgDescValues
;
925 case ParamType::PTR_STRING_ARR
:
926 pDesc
->maDefArgDescs
[j
] = aDefArgDescStrings
;
928 case ParamType::PTR_CELL_ARR
:
929 pDesc
->maDefArgDescs
[j
] = aDefArgDescCells
;
932 pDesc
->maDefArgDescs
[j
] = aDefArgDescNone
;
939 tmpFuncVector
.push_back(pDesc
);
940 nStrLen
= pDesc
->mxFuncName
->getLength();
941 if ( nStrLen
> nMaxFuncNameLen
)
942 nMaxFuncNameLen
= nStrLen
;
947 ScUnoAddInCollection
* pUnoAddIns
= ScGlobal::GetAddInCollection();
948 tools::Long nUnoCount
= pUnoAddIns
->GetFuncCount();
949 for (tools::Long nFunc
=0; nFunc
<nUnoCount
; nFunc
++)
951 pDesc
= new ScFuncDesc
;
952 pDesc
->nFIndex
= nNextId
++;
954 if ( pUnoAddIns
->FillFunctionDesc( nFunc
, *pDesc
, mbEnglishFunctionNames
) )
956 tmpFuncVector
.push_back(pDesc
);
957 nStrLen
= pDesc
->mxFuncName
->getLength();
958 if (nStrLen
> nMaxFuncNameLen
)
959 nMaxFuncNameLen
= nStrLen
;
965 aFunctionList
.swap(tmpFuncVector
);
967 //Initialize iterator
968 aFunctionListIter
= aFunctionList
.end();
971 ScFunctionList::~ScFunctionList()
973 const ScFuncDesc
* pDesc
= First();
981 const ScFuncDesc
* ScFunctionList::First()
983 const ScFuncDesc
* pDesc
= nullptr;
984 aFunctionListIter
= aFunctionList
.begin();
985 if(aFunctionListIter
!= aFunctionList
.end())
986 pDesc
= *aFunctionListIter
;
991 const ScFuncDesc
* ScFunctionList::Next()
993 const ScFuncDesc
* pDesc
= nullptr;
994 if(aFunctionListIter
!= aFunctionList
.end())
996 if((++aFunctionListIter
) != aFunctionList
.end())
997 pDesc
= *aFunctionListIter
;
1002 const ScFuncDesc
* ScFunctionList::GetFunction( sal_uInt32 nIndex
) const
1004 const ScFuncDesc
* pDesc
= nullptr;
1005 if(nIndex
< aFunctionList
.size())
1006 pDesc
= aFunctionList
.at(nIndex
);
1012 sal_uInt32
ScFunctionCategory::getCount() const
1014 return m_rCategory
.size();
1017 OUString
ScFunctionCategory::getName() const
1019 if ( m_sName
.isEmpty() )
1020 m_sName
= ScFunctionMgr::GetCategoryName(m_nCategory
);
1024 const formula::IFunctionDescription
* ScFunctionCategory::getFunction(sal_uInt32 _nPos
) const
1026 const ScFuncDesc
* pDesc
= nullptr;
1027 if(_nPos
< m_rCategory
.size())
1028 pDesc
= m_rCategory
.at(_nPos
);
1032 sal_uInt32
ScFunctionCategory::getNumber() const
1038 ScFunctionMgr::ScFunctionMgr()
1040 ScFunctionList
* pFuncList
/**< list of all calc functions */
1041 = ScGlobal::GetStarCalcFunctionList();
1043 assert(pFuncList
&& "Functionlist not found.");
1044 sal_uInt32 catCount
[MAX_FUNCCAT
] = {0};
1046 aCatLists
[0].reserve(pFuncList
->GetCount());
1048 // Retrieve all functions, store in cumulative ("All") category, and count
1049 // number of functions in each category
1050 for(const ScFuncDesc
* pDesc
= pFuncList
->First(); pDesc
; pDesc
= pFuncList
->Next())
1052 OSL_ENSURE((pDesc
->nCategory
) < MAX_FUNCCAT
, "Unknown category");
1053 if ((pDesc
->nCategory
) < MAX_FUNCCAT
)
1054 ++catCount
[pDesc
->nCategory
];
1055 aCatLists
[0].push_back(pDesc
);
1058 // Sort functions in cumulative category by name
1059 ::std::sort(aCatLists
[0].begin(), aCatLists
[0].end(), ScFuncDesc::compareByName
);
1061 // Allocate correct amount of space for categories
1062 for (sal_uInt16 i
= 1; i
< MAX_FUNCCAT
; ++i
)
1064 aCatLists
[i
].reserve(catCount
[i
]);
1067 // Fill categories with the corresponding functions (still sorted by name)
1068 for (auto const& elemList
: aCatLists
[0])
1070 if ((elemList
->nCategory
) < MAX_FUNCCAT
)
1071 aCatLists
[elemList
->nCategory
].push_back(elemList
);
1074 // Initialize iterators
1075 pCurCatListIter
= aCatLists
[0].end();
1076 pCurCatListEnd
= aCatLists
[0].end();
1079 ScFunctionMgr::~ScFunctionMgr()
1084 const ScFuncDesc
* ScFunctionMgr::Get( sal_uInt16 nFIndex
) const
1086 const ScFuncDesc
* pDesc
;
1087 for (pDesc
= First(); pDesc
; pDesc
= Next())
1088 if (pDesc
->nFIndex
== nFIndex
)
1093 const ScFuncDesc
* ScFunctionMgr::First( sal_uInt16 nCategory
) const
1095 OSL_ENSURE( nCategory
< MAX_FUNCCAT
, "Unknown category" );
1096 const ScFuncDesc
* pDesc
= nullptr;
1097 if ( nCategory
< MAX_FUNCCAT
)
1099 pCurCatListIter
= aCatLists
[nCategory
].begin();
1100 pCurCatListEnd
= aCatLists
[nCategory
].end();
1101 pDesc
= *pCurCatListIter
;
1105 pCurCatListIter
= aCatLists
[0].end();
1106 pCurCatListEnd
= aCatLists
[0].end();
1111 const ScFuncDesc
* ScFunctionMgr::Next() const
1113 const ScFuncDesc
* pDesc
= nullptr;
1114 if ( pCurCatListIter
!= pCurCatListEnd
)
1116 if ( (++pCurCatListIter
) != pCurCatListEnd
)
1118 pDesc
= *pCurCatListIter
;
1124 sal_uInt32
ScFunctionMgr::getCount() const
1126 return MAX_FUNCCAT
- 1;
1129 const formula::IFunctionCategory
* ScFunctionMgr::getCategory(sal_uInt32 nCategory
) const
1131 if ( nCategory
< (MAX_FUNCCAT
-1) )
1133 if (m_aCategories
.find(nCategory
) == m_aCategories
.end())
1134 m_aCategories
[nCategory
] = std::make_shared
<ScFunctionCategory
>(aCatLists
[nCategory
+1],nCategory
); // aCatLists[0] is "all"
1135 return m_aCategories
[nCategory
].get();
1140 void ScFunctionMgr::fillLastRecentlyUsedFunctions(::std::vector
< const formula::IFunctionDescription
*>& _rLastRUFunctions
) const
1142 const ScAppOptions
& rAppOpt
= ScModule::get()->GetAppOptions();
1143 sal_uInt16 nLRUFuncCount
= std::min( rAppOpt
.GetLRUFuncListCount(), sal_uInt16(LRU_MAX
) );
1144 sal_uInt16
* pLRUListIds
= rAppOpt
.GetLRUFuncList();
1145 _rLastRUFunctions
.clear();
1149 for (sal_uInt16 i
= 0; i
< nLRUFuncCount
; ++i
)
1151 _rLastRUFunctions
.push_back( Get( pLRUListIds
[i
] ) );
1156 OUString
ScFunctionMgr::GetCategoryName(sal_uInt32 _nCategoryNumber
)
1158 if (_nCategoryNumber
>= SC_FUNCGROUP_COUNT
)
1160 OSL_FAIL("Invalid category number!");
1164 return ScResId(RID_FUNCTION_CATEGORIES
[_nCategoryNumber
]);
1167 sal_Unicode
ScFunctionMgr::getSingleToken(const formula::IFunctionManager::EToken _eToken
) const
1172 return ScCompiler::GetNativeSymbolChar(ocOpen
);
1174 return ScCompiler::GetNativeSymbolChar(ocClose
);
1176 return ScCompiler::GetNativeSymbolChar(ocSep
);
1178 return ScCompiler::GetNativeSymbolChar(ocArrayOpen
);
1180 return ScCompiler::GetNativeSymbolChar(ocArrayClose
);
1182 return ScCompiler::GetNativeSymbolChar(ocTableRefOpen
);
1183 case eTableRefClose
:
1184 return ScCompiler::GetNativeSymbolChar(ocTableRefClose
);
1189 static void ScFuncRes(const ScFuncDescCore
&rEntry
, ScFuncDesc
* pDesc
, bool& rbSuppressed
)
1191 const sal_uInt16 nOpCode
= rEntry
.nOpCode
;
1192 sal_uInt16 nFunctionFlags
= rEntry
.nFunctionFlags
;
1193 // Bit 1: entirely suppressed
1194 // Bit 2: hidden unless used
1195 rbSuppressed
= ((nFunctionFlags
& 1) != 0);
1196 pDesc
->mbHidden
= ((nFunctionFlags
& 2) != 0);
1197 pDesc
->nCategory
= rEntry
.nCategory
;
1198 pDesc
->sHelpId
= rEntry
.pHelpId
;
1199 pDesc
->nArgCount
= rEntry
.nArgs
;
1200 sal_uInt16 nArgs
= pDesc
->nArgCount
;
1201 sal_uInt16 nVarArgsSet
= 0;
1202 if (nArgs
>= PAIRED_VAR_ARGS
)
1205 nArgs
-= PAIRED_VAR_ARGS
- nVarArgsSet
;
1207 else if (nArgs
>= VAR_ARGS
)
1210 nArgs
-= VAR_ARGS
- nVarArgsSet
;
1212 assert(nArgs
<= SAL_N_ELEMENTS(rEntry
.aOptionalArgs
));
1215 pDesc
->nVarArgsStart
= nArgs
- nVarArgsSet
;
1216 pDesc
->nVarArgsLimit
= rEntry
.nVarArgsLimit
;
1217 pDesc
->pDefArgFlags
= new ScFuncDesc::ParameterFlags
[nArgs
];
1218 for (sal_uInt16 i
= 0; i
< nArgs
; ++i
)
1220 pDesc
->pDefArgFlags
[i
].bOptional
= static_cast<bool>(rEntry
.aOptionalArgs
[i
]);
1224 pDesc
->mxFuncName
= ScCompiler::GetNativeSymbol(static_cast<OpCode
>(nOpCode
));
1225 pDesc
->mxFuncDesc
= ScResId(rEntry
.pResource
[0]);
1230 pDesc
->maDefArgNames
.clear();
1231 pDesc
->maDefArgNames
.resize(nArgs
);
1232 pDesc
->maDefArgDescs
.clear();
1233 pDesc
->maDefArgDescs
.resize(nArgs
);
1234 for (sal_uInt16 i
= 0; i
< nArgs
; ++i
)
1236 size_t nIndex
= (i
* 2) + 1;
1237 if (nIndex
< rEntry
.nResourceLen
)
1238 pDesc
->maDefArgNames
[i
] = ScResId(rEntry
.pResource
[nIndex
]);
1239 if (nIndex
+ 1 < rEntry
.nResourceLen
)
1240 pDesc
->maDefArgDescs
[i
] = ScResId(rEntry
.pResource
[nIndex
+ 1]);
1241 // If empty and variable number of arguments and last parameter and
1242 // parameter is optional and the previous is not optional, repeat
1243 // previous parameter name and description.
1244 if ((pDesc
->maDefArgNames
[i
].isEmpty() || pDesc
->maDefArgDescs
[i
].isEmpty()) &&
1245 nVarArgsSet
> 0 && i
> nVarArgsSet
&& (i
== nArgs
-1 || i
== nArgs
-2) &&
1246 pDesc
->pDefArgFlags
[i
].bOptional
)
1248 sal_uInt16 nPrev
= i
- nVarArgsSet
;
1249 if (!pDesc
->pDefArgFlags
[nPrev
].bOptional
)
1251 if (pDesc
->maDefArgNames
[i
].isEmpty())
1252 pDesc
->maDefArgNames
[i
] = pDesc
->maDefArgNames
[nPrev
];
1253 if (pDesc
->maDefArgDescs
[i
].isEmpty())
1254 pDesc
->maDefArgDescs
[i
] = pDesc
->maDefArgDescs
[nPrev
];
1255 // This also means that variable arguments start one
1256 // parameter set earlier.
1257 pDesc
->nVarArgsStart
-= nVarArgsSet
;
1263 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */