Files
odfstudio/include/formula/opcode.hxx
T
Ben Urban 58c2fbaea0 Fixed some typos in comments and metadata for LET
Removed LET from sc/README.md's list of functions supporting
wildcards and regular expressions, since it doesn't interact
with either.

Changed LET's return type from ForceArrayReturn to Value, since
it usually doesn't return an array.

Change-Id: I99168d274483ddea5ba338d4e019cf433fe88c45
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205977
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-06-29 14:45:57 +02:00

1079 lines
38 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#pragma once
#include <cassert>
#include <sstream>
#include <sal/types.h>
/* Central definition of OpCodes for spreadsheet functions */
enum OpCode : sal_uInt16
{
// Special commands
ocPush = 0,
// 1 used to be SC_OPCODE_CALL
ocStop = 2,
ocExternal = 3,
ocName = 4,
// 5 used to be SC_OPCODE_EXTERNAL_REF
// Jump commands
ocIf = 6,
ocIfError = 7,
ocIfNA = 8,
ocChoose = 9,
// Parentheses and separators
ocOpen = 10,
ocClose = 11,
ocSep = 12,
// Special OpCodes
ocMissing = 13,
ocBad = 14,
ocStringXML = 15,
ocSpaces = 16,
ocWhitespace = 17,
ocMatRef = 18,
// Access commands
/* additional access operators */
ocDBArea = 19,
ocTableRef = 20,
ocMacro = 21,
ocColRowName = 22,
ocColRowNameAuto = 23,
// Percent operator _follows_ value
ocPercentSign = 24,
ocArrayOpen = 25,
ocArrayClose = 26,
ocArrayRowSep = 27,
ocArrayColSep = 28, /* some convs use sep != col_sep */
ocTableRefOpen = 29,
ocTableRefClose = 30,
ocTableRefItemAll = 31,
ocTableRefItemHeaders = 32,
ocTableRefItemData = 33,
ocTableRefItemTotals = 34,
ocTableRefItemThisRow = 35,
ocStopDiv = 36,
ocSkip = 37, /* used to skip raw tokens during string compilation */
ocStringName = 38, /* special OpCode for lambda function names */
ocLet = 39,
ocDPFieldName = 40,
// Error constants
ocStartErrors = 41,
ocErrNull = 41,
ocErrDivZero = 42,
ocErrValue = 43,
ocErrRef = 44,
ocErrName = 45,
ocErrNum = 46,
ocErrNA = 47,
ocErrSpill = 48,
ocStopErrors = 49,
// Binary operators
ocStartBinaryOperators = 50,
ocAdd = 50,
ocSub = 51,
ocMul = 52,
ocDiv = 53,
ocAmpersand = 54,
ocPow = 55,
ocEqual = 56,
ocNotEqual = 57,
ocLess = 58,
ocGreater = 59,
ocLessEqual = 60,
ocGreaterEqual = 61,
ocAnd = 62,
ocOr = 63,
ocIntersect = 64,
ocUnion = 65,
ocRange = 66,
ocStopBinaryOperators = 67,
/* NOTE: binary and unary operators must be in sequence for compiler! */
// Unary operators
ocStartUnaryOperators = 70,
ocNegSub = 70,
// The @ single-value prefix operator (implicit intersection).
ocSingleValue = 71,
ocStopUnaryOperators = 72,
ocStartFunction = 75,
// Functions with no parameters
ocStartNoParameters = 75,
ocPi = 75,
ocRandom = 76,
ocTrue = 77,
ocFalse = 78,
ocGetActDate = 79,
ocGetActTime = 80,
ocNotAvail = 81,
ocCurrent = 82,
ocRandomNV = 83,
ocStopNoParameters = 84,
// Functions with one parameter
ocStartOneParameter = 90,
ocDeg = 90, /* trigonometric */
ocRad = 91,
ocSin = 92,
ocCos = 93,
ocTan = 94,
ocCot = 95,
ocArcSin = 96,
ocArcCos = 97,
ocArcTan = 98,
ocArcCot = 99,
ocSinHyp = 100,
ocCosHyp = 101,
ocTanHyp = 102,
ocCotHyp = 103,
ocArcSinHyp = 104, /* transcendent */
ocArcCosHyp = 105,
ocArcTanHyp = 106,
ocArcCotHyp = 107,
ocCosecant = 108,
ocSecant = 109,
ocCosecantHyp = 110,
ocSecantHyp = 111,
ocExp = 112,
ocLn = 113,
ocSqrt = 114,
ocFact = 115,
ocGetYear = 116, /* date and time */
ocGetMonth = 117,
ocGetDay = 118,
ocGetHour = 119,
ocGetMin = 120,
ocGetSec = 121,
ocPlusMinus = 122, /* miscellaneous */
ocAbs = 123,
ocInt = 124,
ocPhi = 125,
ocGauss = 126,
ocIsEmpty = 127, /* obtain type */
ocIsString = 128,
ocIsNonString = 129,
ocIsLogical = 130,
ocType = 131,
ocIsRef = 132,
ocIsValue = 133,
ocIsFormula = 134,
ocIsNA = 135,
ocIsErr = 136,
ocIsError = 137,
ocIsEven = 138,
ocIsOdd = 139,
ocN = 140,
// String functions
ocGetDateValue = 141,
ocGetTimeValue = 142,
ocCode = 143,
ocTrim = 144,
ocUpper = 145,
ocProper = 146,
ocLower = 147,
ocLen = 148,
ocT = 149, /* miscellaneous, part 21 */
ocValue = 150,
ocClean = 151,
ocChar = 152,
ocLog10 = 153,
ocEven = 154,
ocOdd = 155,
ocStdNormDist = 156,
ocFisher = 157,
ocFisherInv = 158,
ocSNormInv = 159,
ocGammaLn = 160,
ocErrorType = 161,
// 162 was ???
ocFormula = 163,
ocArabic = 164,
ocInfo = 165,
ocBahtText = 166,
ocJis = 167,
ocAsc = 168,
ocUnicode = 169,
ocUnichar = 170,
ocGamma = 171,
ocGammaLn_MS = 172,
ocErf_MS = 173,
ocErfc_MS = 174,
ocErrorType_ODF = 175,
ocEncodeURL = 176,
ocIsoWeeknum = 177,
ocNot = 178,
ocNeg = 179,
ocStopOneParameter = 180,
// Functions with more than one parameter
ocStartTwoParameters = 201,
ocArcTan2 = 201,
ocCeil = 202,
ocFloor = 203,
ocRound = 204,
ocRoundUp = 205,
ocRoundDown = 206,
ocTrunc = 207,
ocLog = 208,
ocPower = 209,
ocGCD = 210,
ocLCM = 211,
ocMod = 212,
ocSumProduct = 213,
ocSumSQ = 214,
ocSumX2MY2 = 215,
ocSumX2DY2 = 216,
ocSumXMY2 = 217,
ocGetDate = 218,
ocGetTime = 219,
ocGetDiffDate = 220,
ocGetDiffDate360 = 221,
ocMin = 222,
ocMax = 223,
ocSum = 224,
ocProduct = 225,
ocAverage = 226,
ocCount = 227,
ocCount2 = 228,
ocNPV = 229,
ocIRR = 230,
ocVar = 231,
ocVarP = 232,
ocStDev = 233,
ocStDevP = 234,
ocB = 235,
ocNormDist = 236,
ocExpDist = 237,
ocBinomDist = 238,
ocPoissonDist = 239,
ocCombin = 240,
ocCombinA = 241,
ocPermut = 242,
ocPermutationA = 243,
ocPV = 244,
ocSYD = 245,
ocDDB = 246,
ocDB = 247,
ocVBD = 248,
ocPDuration = 249,
ocSLN = 250,
ocPMT = 251,
ocColumns = 252,
ocRows = 253,
ocColumn = 254,
ocRow = 255,
ocRRI = 256,
ocFV = 257,
ocNper = 258,
ocRate = 259,
ocIpmt = 260,
ocPpmt = 261,
ocCumIpmt = 262,
ocCumPrinc = 263,
ocEffect = 264,
ocNominal = 265,
ocSubTotal = 266,
// Database functions
ocDBSum = 267,
ocDBCount = 268,
ocDBCount2 = 269,
ocDBAverage = 270,
ocDBGet = 271,
ocDBMax = 272,
ocDBMin = 273,
ocDBProduct = 274,
ocDBStdDev = 275,
ocDBStdDevP = 276,
ocDBVar = 277,
ocDBVarP = 278,
// Management functions
ocIndirect = 279,
ocAddress = 280,
ocMatch = 281,
ocCountEmptyCells = 282,
ocCountIf = 283,
ocSumIf = 284,
ocLookup = 285,
ocVLookup = 286,
ocHLookup = 287,
ocMultiArea = 288,
ocOffset = 289,
ocIndex = 290,
ocAreas = 291,
// String functions
ocCurrency = 292,
ocReplace = 293,
ocFixed = 294,
ocFind = 295,
ocExact = 296,
ocLeft = 297,
ocRight = 298,
ocSearch = 299,
ocMid = 300,
ocText = 301,
ocSubstitute = 302,
ocRept = 303,
ocConcat = 304,
// Matrix functions
ocMatValue = 305,
ocMatDet = 306,
ocMatInv = 307,
ocMatMult = 308,
ocMatTrans = 309,
ocMatrixUnit = 310,
// BackSolver
ocBackSolver = 311,
// Statistical functions
ocHypGeomDist = 312,
ocLogNormDist = 313,
ocTDist = 314,
ocFDist = 315,
ocChiDist = 316,
ocWeibull = 317,
ocNegBinomVert = 318,
ocCritBinom = 319,
ocKurt = 320,
ocHarMean = 321,
ocGeoMean = 322,
ocStandard = 323,
ocAveDev = 324,
ocSkew = 325,
ocDevSq = 326,
ocMedian = 327,
ocModalValue = 328,
ocZTest = 329,
ocTTest = 330,
ocRank = 331,
ocPercentile = 332,
ocPercentrank = 333,
ocLarge = 334,
ocSmall = 335,
ocFrequency = 336,
ocQuartile = 337,
ocNormInv = 338,
ocConfidence = 339,
ocFTest = 340,
ocTrimMean = 341,
ocProb = 342,
ocCorrel = 343,
ocCovar = 344,
ocPearson = 345,
ocRSQ = 346,
ocSTEYX = 347,
ocSlope = 348,
ocIntercept = 349,
ocTrend = 350,
ocGrowth = 351,
ocLinest = 352,
ocLogest = 353,
ocForecast = 354,
ocChiInv = 355,
ocGammaDist = 356,
ocGammaInv = 357,
ocTInv = 358,
ocFInv = 359,
ocChiTest = 360,
ocLogInv = 361,
ocTableOp = 362,
ocBetaDist = 363,
ocBetaInv = 364,
// miscellaneous
ocWeek = 365,
ocGetDayOfWeek = 366,
ocNoName = 367,
ocStyle = 368,
ocDde = 369,
ocBase = 370,
ocSheet = 371,
ocSheets = 372,
ocMinA = 373,
ocMaxA = 374,
ocAverageA = 375,
ocStDevA = 376,
ocStDevPA = 377,
ocVarA = 378,
ocVarPA = 379,
ocEasterSunday = 380,
ocDecimal = 381,
ocConvertOOo = 382,
ocRoman = 383,
ocMIRR = 384,
ocCell = 385,
ocISPMT = 386,
ocHyperLink = 387,
ocXLookup = 388,
ocXMatch = 389,
ocGetPivotData = 390,
ocEuroConvert = 391,
ocNumberValue = 392,
ocChiSqDist = 393,
ocChiSqInv = 394,
// Bit functions
ocBitAnd = 395,
ocBitOr = 396,
ocBitXor = 397,
ocBitRshift = 398,
ocBitLshift = 399,
ocGetDateDif = 400,
ocXor = 401,
ocAverageIf = 402,
ocSumIfs = 403,
ocAverageIfs = 404,
ocCountIfs = 405,
ocSkewp = 406,
ocLenB = 407,
ocRightB = 408,
ocLeftB = 409,
ocMidB = 410,
ocFilterXML = 411,
ocWebservice = 412,
ocCovarianceS = 413,
ocCovarianceP = 414,
ocStDevP_MS = 415,
ocStDevS = 416,
ocVarP_MS = 417,
ocVarS = 418,
ocBetaDist_MS = 419,
ocBetaInv_MS = 420,
ocBinomDist_MS = 421,
ocBinomInv = 422,
ocChiDist_MS = 423,
ocChiInv_MS = 424,
ocChiTest_MS = 425,
ocChiSqDist_MS = 426,
ocChiSqInv_MS = 427,
ocConfidence_N = 428,
ocConfidence_T = 429,
ocFDist_LT = 430,
ocFDist_RT = 431,
ocFInv_LT = 432,
ocFInv_RT = 433,
ocFTest_MS = 434,
ocExpDist_MS = 435,
ocHypGeomDist_MS = 436,
ocPoissonDist_MS = 437,
ocWeibull_MS = 438,
ocGammaDist_MS = 439,
ocGammaInv_MS = 440,
ocLogNormDist_MS = 441,
ocLogInv_MS = 442,
ocNormDist_MS = 443,
ocNormInv_MS = 444,
ocStdNormDist_MS = 445,
ocSNormInv_MS = 446,
ocTDist_MS = 447,
ocTDist_RT = 448,
ocTDist_2T = 449,
ocTInv_2T = 450,
ocTInv_MS = 451,
ocTTest_MS = 452,
ocPercentile_Inc = 453,
ocPercentrank_Inc = 454,
ocQuartile_Inc = 455,
ocRank_Eq = 456,
ocPercentile_Exc = 457,
ocPercentrank_Exc = 458,
ocQuartile_Exc = 459,
ocRank_Avg = 460,
ocModalValue_MS = 461,
ocModalValue_Multi = 462,
ocNegBinomDist_MS = 463,
ocZTest_MS = 464,
ocCeil_MS = 465,
ocCeil_ISO = 466,
ocFloor_MS = 467,
ocNetWorkdays_MS = 468,
ocWorkday_MS = 469,
ocAggregate = 470,
ocColor = 471,
ocCeil_Math = 472,
ocCeil_Precise = 473,
ocNetWorkdays = 474,
ocFloor_Math = 475,
ocFloor_Precise = 476,
ocRawSubtract = 477,
ocWeeknumOOo = 478,
ocForecast_ETS_ADD = 479,
ocForecast_ETS_SEA = 480,
ocForecast_ETS_MUL = 481,
ocForecast_ETS_PIA = 482,
ocForecast_ETS_PIM = 483,
ocForecast_ETS_STA = 484,
ocForecast_ETS_STM = 485,
ocForecast_LIN = 486,
ocConcat_MS = 487,
ocTextJoin_MS = 488,
ocIfs_MS = 489,
ocSwitch_MS = 490,
ocMinIfs_MS = 491,
ocMaxIfs_MS = 492,
ocRoundSig = 493,
ocReplaceB = 494,
ocFindB = 495,
ocSearchB = 496,
ocRegex = 497,
ocFourier = 498,
ocRandbetweenNV = 499,
ocFilter = 500,
ocSort = 501,
ocSortBy = 502,
ocMatSequence = 503,
ocRandArray = 504,
ocChooseCols = 505,
ocChooseRows = 506,
ocDrop = 507,
ocExpand = 508,
ocHStack = 509,
ocVStack = 510,
ocTake = 511,
ocTextAfter = 512,
ocTextBefore = 513,
ocTextSplit = 514,
ocToCol = 515,
ocToRow = 516,
ocUnique = 517,
ocWrapCols = 518,
ocWrapRows = 519,
ocUDExternal = 520, /* User-defined external function */
ocStopTwoParameters = 521, /* last function with two or more parameters' OpCode + 1 */
ocStopFunction = ocStopTwoParameters, /* last function's OpCode + 1 */
ocLastOpcodeId = ocStopFunction - 1, /* last OpCode */
// internal stuff
ocInternalBegin = 9999,
ocTTT = 9999,
ocDebugVar = 10000,
ocInternalEnd = 10000,
// from here on ExtraData
ocDataToken1 = 10001,
// no OpCode
ocNone = 0xFFFF
};
// Only to be used for debugging output. No guarantee of stability of the
// return value.
// Turn this into an operator<< when OpCode becomes a scoped enum
inline std::string OpCodeEnumToString(OpCode eCode)
{
switch (eCode)
{
case ocPush: return "Push";
case ocStop: return "Stop";
case ocExternal: return "External";
case ocUDExternal: return "UDExternal";
case ocName: return "Name";
case ocIf: return "If";
case ocIfError: return "IfError";
case ocIfNA: return "IfNA";
case ocChoose: return "Choose";
case ocOpen: return "Open";
case ocClose: return "Close";
case ocTableRefOpen: return "TableRefOpen";
case ocTableRefClose: return "TableRefClose";
case ocSep: return "Sep";
case ocArrayOpen: return "ArrayOpen";
case ocArrayClose: return "ArrayClose";
case ocArrayRowSep: return "ArrayRowSep";
case ocArrayColSep: return "ArrayColSep";
case ocMissing: return "Missing";
case ocBad: return "Bad";
case ocStringXML: return "StringXML";
case ocStringName: return "StringName";
case ocSpaces: return "Spaces";
case ocWhitespace: return "Whitespace";
case ocMatRef: return "MatRef";
case ocTableRefItemAll: return "TableRefItemAll";
case ocTableRefItemHeaders: return "TableRefItemHeaders";
case ocTableRefItemData: return "TableRefItemData";
case ocTableRefItemTotals: return "TableRefItemTotals";
case ocTableRefItemThisRow: return "TableRefItemThisRow";
case ocSkip: return "Skip";
case ocDBArea: return "DBArea";
case ocTableRef: return "TableRef";
case ocMacro: return "Macro";
case ocColRowName: return "ColRowName";
case ocColRowNameAuto: return "ColRowNameAuto";
case ocDPFieldName: return "DPFieldName";
case ocPercentSign: return "PercentSign";
case ocErrNull: return "ErrNull";
case ocErrDivZero: return "ErrDivZero";
case ocErrValue: return "ErrValue";
case ocErrRef: return "ErrRef";
case ocErrName: return "ErrName";
case ocErrNum: return "ErrNum";
case ocErrNA: return "ErrNA";
case ocErrSpill: return "ErrSpill";
case ocAdd: return "Add";
case ocSub: return "Sub";
case ocMul: return "Mul";
case ocDiv: return "Div";
case ocAmpersand: return "Ampersand";
case ocPow: return "Pow";
case ocEqual: return "Equal";
case ocNotEqual: return "NotEqual";
case ocLess: return "Less";
case ocGreater: return "Greater";
case ocLessEqual: return "LessEqual";
case ocGreaterEqual: return "GreaterEqual";
case ocAnd: return "And";
case ocOr: return "Or";
case ocXor: return "Xor";
case ocIntersect: return "Intersect";
case ocUnion: return "Union";
case ocRange: return "Range";
case ocNot: return "Not";
case ocNeg: return "Neg";
case ocNegSub: return "NegSub";
case ocSingleValue: return "SingleValue";
case ocPi: return "Pi";
case ocRandom: return "Random";
case ocRandomNV: return "RandomNV";
case ocTrue: return "True";
case ocFalse: return "False";
case ocGetActDate: return "GetActDate";
case ocGetActTime: return "GetActTime";
case ocNotAvail: return "NotAvail";
case ocCurrent: return "Current";
case ocDeg: return "Deg";
case ocRad: return "Rad";
case ocSin: return "Sin";
case ocCos: return "Cos";
case ocTan: return "Tan";
case ocCot: return "Cot";
case ocArcSin: return "ArcSin";
case ocArcCos: return "ArcCos";
case ocArcTan: return "ArcTan";
case ocArcCot: return "ArcCot";
case ocSinHyp: return "SinHyp";
case ocCosHyp: return "CosHyp";
case ocTanHyp: return "TanHyp";
case ocCotHyp: return "CotHyp";
case ocArcSinHyp: return "ArcSinHyp";
case ocArcCosHyp: return "ArcCosHyp";
case ocArcTanHyp: return "ArcTanHyp";
case ocArcCotHyp: return "ArcCotHyp";
case ocCosecant: return "Cosecant";
case ocSecant: return "Secant";
case ocCosecantHyp: return "CosecantHyp";
case ocSecantHyp: return "SecantHyp";
case ocExp: return "Exp";
case ocLn: return "Ln";
case ocSqrt: return "Sqrt";
case ocFact: return "Fact";
case ocGetYear: return "GetYear";
case ocGetMonth: return "GetMonth";
case ocGetDay: return "GetDay";
case ocGetHour: return "GetHour";
case ocGetMin: return "GetMin";
case ocGetSec: return "GetSec";
case ocPlusMinus: return "PlusMinus";
case ocAbs: return "Abs";
case ocInt: return "Int";
case ocPhi: return "Phi";
case ocGauss: return "Gauss";
case ocIsEmpty: return "IsEmpty";
case ocIsString: return "IsString";
case ocIsNonString: return "IsNonString";
case ocIsLogical: return "IsLogical";
case ocType: return "Type";
case ocCell: return "Cell";
case ocIsRef: return "IsRef";
case ocIsValue: return "IsValue";
case ocIsFormula: return "IsFormula";
case ocIsNA: return "IsNA";
case ocIsErr: return "IsErr";
case ocIsError: return "IsError";
case ocIsEven: return "IsEven";
case ocIsOdd: return "IsOdd";
case ocN: return "N";
case ocGetDateValue: return "GetDateValue";
case ocGetTimeValue: return "GetTimeValue";
case ocCode: return "Code";
case ocTrim: return "Trim";
case ocUpper: return "Upper";
case ocProper: return "Proper";
case ocLower: return "Lower";
case ocLen: return "Len";
case ocT: return "T";
case ocValue: return "Value";
case ocClean: return "Clean";
case ocChar: return "Char";
case ocLog10: return "Log10";
case ocEven: return "Even";
case ocOdd: return "Odd";
case ocStdNormDist: return "StdNormDist";
case ocStdNormDist_MS: return "StdNormDist_MS";
case ocFisher: return "Fisher";
case ocFisherInv: return "FisherInv";
case ocSNormInv: return "SNormInv";
case ocSNormInv_MS: return "SNormInv_MS";
case ocGammaLn: return "GammaLn";
case ocGammaLn_MS: return "GammaLn_MS";
case ocGamma: return "Gamma";
case ocErrorType: return "ErrorType";
case ocErrorType_ODF: return "ErrorType_ODF";
case ocFormula: return "Formula";
case ocArabic: return "Arabic";
case ocInfo: return "Info";
case ocBahtText: return "BahtText";
case ocJis: return "Jis";
case ocAsc: return "Asc";
case ocUnicode: return "Unicode";
case ocUnichar: return "Unichar";
case ocArcTan2: return "ArcTan2";
case ocCeil: return "Ceil";
case ocCeil_MS: return "Ceil_MS";
case ocCeil_Precise: return "Ceil_Precise";
case ocCeil_ISO: return "Ceil_ISO";
case ocCeil_Math: return "Ceil_Math";
case ocFloor: return "Floor";
case ocFloor_MS: return "Floor_MS";
case ocFloor_Math: return "Floor_Math";
case ocFloor_Precise: return "Floor_Precise";
case ocRound: return "Round";
case ocRoundUp: return "RoundUp";
case ocRoundDown: return "RoundDown";
case ocTrunc: return "Trunc";
case ocLog: return "Log";
case ocPower: return "Power";
case ocGCD: return "GCD";
case ocLCM: return "LCM";
case ocMod: return "Mod";
case ocSumProduct: return "SumProduct";
case ocSumSQ: return "SumSQ";
case ocSumX2MY2: return "SumX2MY2";
case ocSumX2DY2: return "SumX2DY2";
case ocSumXMY2: return "SumXMY2";
case ocGetDate: return "GetDate";
case ocGetTime: return "GetTime";
case ocGetDiffDate: return "GetDiffDate";
case ocGetDiffDate360: return "GetDiffDate360";
case ocGetDateDif: return "GetDateDif";
case ocMin: return "Min";
case ocMax: return "Max";
case ocSum: return "Sum";
case ocProduct: return "Product";
case ocAverage: return "Average";
case ocCount: return "Count";
case ocCount2: return "Count2";
case ocNPV: return "NPV";
case ocIRR: return "IRR";
case ocMIRR: return "MIRR";
case ocISPMT: return "ISPMT";
case ocVar: return "Var";
case ocVarP: return "VarP";
case ocVarP_MS: return "VarP_MS";
case ocVarS: return "VarS";
case ocStDev: return "StDev";
case ocStDevP: return "StDevP";
case ocStDevP_MS: return "StDevP_MS";
case ocStDevS: return "StDevS";
case ocB: return "B";
case ocNormDist: return "NormDist";
case ocNormDist_MS: return "NormDist_MS";
case ocExpDist: return "ExpDist";
case ocExpDist_MS: return "ExpDist_MS";
case ocBinomDist: return "BinomDist";
case ocBinomDist_MS: return "BinomDist_MS";
case ocBinomInv: return "BinomInv";
case ocPoissonDist: return "PoissonDist";
case ocPoissonDist_MS: return "PoissonDist_MS";
case ocCombin: return "Combin";
case ocCombinA: return "CombinA";
case ocPermut: return "Permut";
case ocPermutationA: return "PermutationA";
case ocPV: return "PV";
case ocSYD: return "SYD";
case ocDDB: return "DDB";
case ocDB: return "DB";
case ocVBD: return "VBD";
case ocPDuration: return "PDuration";
case ocSLN: return "SLN";
case ocPMT: return "PMT";
case ocColumns: return "Columns";
case ocRows: return "Rows";
case ocColumn: return "Column";
case ocRow: return "Row";
case ocRRI: return "RRI";
case ocFV: return "FV";
case ocNper: return "Nper";
case ocRate: return "Rate";
case ocIpmt: return "Ipmt";
case ocPpmt: return "Ppmt";
case ocCumIpmt: return "CumIpmt";
case ocCumPrinc: return "CumPrinc";
case ocEffect: return "Effect";
case ocNominal: return "Nominal";
case ocSubTotal: return "SubTotal";
case ocRawSubtract: return "RawSubtract";
case ocIfs_MS: return "Ifs_MS";
case ocSwitch_MS: return "Switch_MS";
case ocMinIfs_MS: return "MinIfs_MS";
case ocMaxIfs_MS: return "MaxIfs_MS";
case ocRoundSig: return "RoundSig";
case ocDBSum: return "DBSum";
case ocDBCount: return "DBCount";
case ocDBCount2: return "DBCount2";
case ocDBAverage: return "DBAverage";
case ocDBGet: return "DBGet";
case ocDBMax: return "DBMax";
case ocDBMin: return "DBMin";
case ocDBProduct: return "DBProduct";
case ocDBStdDev: return "DBStdDev";
case ocDBStdDevP: return "DBStdDevP";
case ocDBVar: return "DBVar";
case ocDBVarP: return "DBVarP";
case ocIndirect: return "Indirect";
case ocAddress: return "Address";
case ocMatch: return "Match";
case ocXMatch: return "XMatch";
case ocCountEmptyCells: return "CountEmptyCells";
case ocCountIf: return "CountIf";
case ocSumIf: return "SumIf";
case ocAverageIf: return "AverageIf";
case ocSumIfs: return "SumIfs";
case ocAverageIfs: return "AverageIfs";
case ocCountIfs: return "CountIfs";
case ocLookup: return "Lookup";
case ocVLookup: return "VLookup";
case ocXLookup: return "XLookup";
case ocHLookup: return "HLookup";
case ocMultiArea: return "MultiArea";
case ocOffset: return "Offset";
case ocIndex: return "Index";
case ocAreas: return "Areas";
case ocCurrency: return "Currency";
case ocReplace: return "Replace";
case ocFixed: return "Fixed";
case ocFind: return "Find";
case ocExact: return "Exact";
case ocLeft: return "Left";
case ocRight: return "Right";
case ocSearch: return "Search";
case ocMid: return "Mid";
case ocText: return "Text";
case ocSubstitute: return "Substitute";
case ocRept: return "Rept";
case ocRegex: return "Regex";
case ocConcat: return "Concat";
case ocConcat_MS: return "Concat_MS";
case ocTextJoin_MS: return "TextJoin_MS";
case ocLenB: return "LenB";
case ocRightB: return "RightB";
case ocLeftB: return "LeftB";
case ocMidB: return "MidB";
case ocReplaceB: return "ReplaceB";
case ocFindB: return "FindB";
case ocSearchB: return "SearchB";
case ocNumberValue: return "NumberValue";
case ocMatValue: return "MatValue";
case ocMatDet: return "MatDet";
case ocMatInv: return "MatInv";
case ocMatMult: return "MatMult";
case ocMatSequence: return "MatSequence";
case ocMatTrans: return "MatTrans";
case ocMatrixUnit: return "MatrixUnit";
case ocBackSolver: return "BackSolver";
case ocHypGeomDist: return "HypGeomDist";
case ocHypGeomDist_MS: return "HypGeomDist_MS";
case ocLogNormDist: return "LogNormDist";
case ocLogNormDist_MS: return "LogNormDist_MS";
case ocTDist: return "TDist";
case ocTDist_MS: return "TDist_MS";
case ocTDist_RT: return "TDist_RT";
case ocTDist_2T: return "TDist_2T";
case ocFDist: return "FDist";
case ocFDist_LT: return "FDist_LT";
case ocFDist_RT: return "FDist_RT";
case ocChiDist: return "ChiDist";
case ocChiDist_MS: return "ChiDist_MS";
case ocChiSqDist: return "ChiSqDist";
case ocChiSqDist_MS: return "ChiSqDist_MS";
case ocChiSqInv: return "ChiSqInv";
case ocChiSqInv_MS: return "ChiSqInv_MS";
case ocWeibull: return "Weibull";
case ocWeibull_MS: return "Weibull_MS";
case ocNegBinomVert: return "NegBinomVert";
case ocNegBinomDist_MS: return "NegBinomDist_MS";
case ocCritBinom: return "CritBinom";
case ocKurt: return "Kurt";
case ocHarMean: return "HarMean";
case ocGeoMean: return "GeoMean";
case ocStandard: return "Standard";
case ocAveDev: return "AveDev";
case ocSkew: return "Skew";
case ocSkewp: return "Skewp";
case ocDevSq: return "DevSq";
case ocMedian: return "Median";
case ocModalValue: return "ModalValue";
case ocModalValue_MS: return "ModalValue_MS";
case ocModalValue_Multi: return "ModalValue_Multi";
case ocZTest: return "ZTest";
case ocZTest_MS: return "ZTest_MS";
case ocAggregate: return "Aggregate";
case ocTTest: return "TTest";
case ocTTest_MS: return "TTest_MS";
case ocRank: return "Rank";
case ocPercentile: return "Percentile";
case ocPercentrank: return "Percentrank";
case ocPercentile_Inc: return "Percentile_Inc";
case ocPercentrank_Inc: return "Percentrank_Inc";
case ocQuartile_Inc: return "Quartile_Inc";
case ocRank_Eq: return "Rank_Eq";
case ocPercentile_Exc: return "Percentile_Exc";
case ocPercentrank_Exc: return "Percentrank_Exc";
case ocQuartile_Exc: return "Quartile_Exc";
case ocRank_Avg: return "Rank_Avg";
case ocLarge: return "Large";
case ocSmall: return "Small";
case ocFrequency: return "Frequency";
case ocQuartile: return "Quartile";
case ocNormInv: return "NormInv";
case ocNormInv_MS: return "NormInv_MS";
case ocConfidence: return "Confidence";
case ocConfidence_N: return "Confidence_N";
case ocConfidence_T: return "Confidence_T";
case ocFTest: return "FTest";
case ocFTest_MS: return "FTest_MS";
case ocTrimMean: return "TrimMean";
case ocProb: return "Prob";
case ocCorrel: return "Correl";
case ocCovar: return "Covar";
case ocCovarianceP: return "CovarianceP";
case ocCovarianceS: return "CovarianceS";
case ocPearson: return "Pearson";
case ocRSQ: return "RSQ";
case ocSTEYX: return "STEYX";
case ocSlope: return "Slope";
case ocIntercept: return "Intercept";
case ocTrend: return "Trend";
case ocGrowth: return "Growth";
case ocLinest: return "Linest";
case ocLogest: return "Logest";
case ocForecast: return "Forecast";
case ocForecast_ETS_ADD: return "Forecast_ETS_ADD";
case ocForecast_ETS_SEA: return "Forecast_ETS_SEA";
case ocForecast_ETS_MUL: return "Forecast_ETS_MUL";
case ocForecast_ETS_PIA: return "Forecast_ETS_PIA";
case ocForecast_ETS_PIM: return "Forecast_ETS_PIM";
case ocForecast_ETS_STA: return "Forecast_ETS_STA";
case ocForecast_ETS_STM: return "Forecast_ETS_STM";
case ocForecast_LIN: return "Forecast_LIN";
case ocChiInv: return "ChiInv";
case ocChiInv_MS: return "ChiInv_MS";
case ocGammaDist: return "GammaDist";
case ocGammaDist_MS: return "GammaDist_MS";
case ocGammaInv: return "GammaInv";
case ocGammaInv_MS: return "GammaInv_MS";
case ocTInv: return "TInv";
case ocTInv_2T: return "TInv_2T";
case ocTInv_MS: return "TInv_MS";
case ocFInv: return "FInv";
case ocFInv_LT: return "FInv_LT";
case ocFInv_RT: return "FInv_RT";
case ocChiTest: return "ChiTest";
case ocChiTest_MS: return "ChiTest_MS";
case ocLogInv: return "LogInv";
case ocLogInv_MS: return "LogInv_MS";
case ocTableOp: return "TableOp";
case ocBetaDist: return "BetaDist";
case ocBetaInv: return "BetaInv";
case ocBetaDist_MS: return "BetaDist_MS";
case ocBetaInv_MS: return "BetaInv_MS";
case ocBitAnd: return "BitAnd";
case ocBitOr: return "BitOr";
case ocBitXor: return "BitXor";
case ocBitRshift: return "BitRshift";
case ocBitLshift: return "BitLshift";
case ocWeek: return "Week";
case ocIsoWeeknum: return "IsoWeeknum";
case ocWeeknumOOo: return "WeeknumOOo";
case ocGetDayOfWeek: return "GetDayOfWeek";
case ocNetWorkdays: return "NetWorkdays";
case ocNetWorkdays_MS: return "NetWorkdays_MS";
case ocWorkday_MS: return "Workday_MS";
case ocNoName: return "NoName";
case ocStyle: return "Style";
case ocDde: return "Dde";
case ocBase: return "Base";
case ocSheet: return "Sheet";
case ocSheets: return "Sheets";
case ocMinA: return "MinA";
case ocMaxA: return "MaxA";
case ocAverageA: return "AverageA";
case ocStDevA: return "StDevA";
case ocStDevPA: return "StDevPA";
case ocVarA: return "VarA";
case ocVarPA: return "VarPA";
case ocEasterSunday: return "EasterSunday";
case ocDecimal: return "Decimal";
case ocConvertOOo: return "ConvertOOo";
case ocRoman: return "Roman";
case ocHyperLink: return "HyperLink";
case ocGetPivotData: return "GetPivotData";
case ocEuroConvert: return "EuroConvert";
case ocFilterXML: return "FilterXML";
case ocWebservice: return "Webservice";
case ocColor: return "Color";
case ocErf_MS: return "Erf_MS";
case ocErfc_MS: return "Erfc_MS";
case ocEncodeURL: return "EncodeURL";
case ocFourier: return "Fourier";
case ocRandbetweenNV: return "RandbetweenNV";
case ocRandArray: return "RandArray";
case ocFilter: return "Filter";
case ocSort: return "Sort";
case ocSortBy: return "SortBy";
case ocChooseCols: return "ChooseCols";
case ocChooseRows: return "ChooseRows";
case ocDrop: return "Drop";
case ocExpand: return "Expand";
case ocHStack: return "HStack";
case ocVStack: return "VStack";
case ocTake: return "Take";
case ocTextAfter: return "TextAfter";
case ocTextBefore: return "TextBefore";
case ocTextSplit: return "TextSplit";
case ocToCol: return "ToCol";
case ocToRow: return "ToRow";
case ocUnique: return "Unique";
case ocLet: return "Let";
case ocWrapCols: return "WrapCols";
case ocWrapRows: return "WrapRows";
case ocTTT: return "TTT";
case ocDebugVar: return "DebugVar";
case ocDataToken1: return "DataToken1";
case ocNone: return "None";
default: assert(false); return "???";
}
std::ostringstream os;
os << static_cast<int>(eCode);
return os.str();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */