Surpass

excel_magic.rb

# lots of Excel Magic Numbers
# Boundaries BIFF8+

MAX_ROW = 65536
MAX_COL = 256


BIFF_RECORDS = {
    0x0000 => "DIMENSIONS",
    0x0001 => "BLANK",
    0x0002 => "INTEGER",
    0x0003 => "NUMBER",
    0x0004 => "LABEL",
    0x0005 => "BOOLERR",
    0x0006 => "FORMULA",
    0x0007 => "STRING",
    0x0008 => "ROW",
    0x0009 => "BOF",
    0x000A => "EOF",
    0x000B => "INDEX",
    0x000C => "CALCCOUNT",
    0x000D => "CALCMODE",
    0x000E => "PRECISION",
    0x000F => "REFMODE",
    0x0010 => "DELTA",
    0x0011 => "ITERATION",
    0x0012 => "PROTECT",
    0x0013 => "PASSWORD",
    0x0014 => "HEADER",
    0x0015 => "FOOTER",
    0x0016 => "EXTERNCOUNT",
    0x0017 => "EXTERNSHEET",
    0x0018 => "NAME",
    0x0019 => "WINDOWPROTECT",
    0x001A => "VERTICALPAGEBREAKS",
    0x001B => "HORIZONTALPAGEBREAKS",
    0x001C => "NOTE",
    0x001D => "SELECTION",
    0x001E => "FORMAT",
    0x001F => "FORMATCOUNT",
    0x0020 => "COLUMNDEFAULT",
    0x0021 => "ARRAY",
    0x0022 => "1904",
    0x0023 => "EXTERNNAME",
    0x0024 => "COLWIDTH",
    0x0025 => "DEFAULTROWHEIGHT",
    0x0026 => "LEFTMARGIN",
    0x0027 => "RIGHTMARGIN",
    0x0028 => "TOPMARGIN",
    0x0029 => "BOTTOMMARGIN",
    0x002A => "PRINTHEADERS",
    0x002B => "PRINTGRIDLINES",
    0x002F => "FILEPASS",
    0x0031 => "FONT",
    0x0036 => "TABLE",
    0x003C => "CONTINUE",
    0x003D => "WINDOW1",
    0x003E => "WINDOW2",
    0x0040 => "BACKUP",
    0x0041 => "PANE",
    0x0042 => "CODEPAGE",
    0x0043 => "XF",
    0x0044 => "IXFE",
    0x0045 => "EFONT",
    0x004D => "PLS",
    0x0050 => "DCON",
    0x0051 => "DCONREF",
    0x0053 => "DCONNAME",
    0x0055 => "DEFCOLWIDTH",
    0x0056 => "BUILTINFMTCNT",
    0x0059 => "XCT",
    0x005A => "CRN",
    0x005B => "FILESHARING",
    0x005C => "WRITEACCESS",
    0x005D => "OBJ",
    0x005E => "UNCALCED",
    0x005F => "SAFERECALC",
    0x0060 => "TEMPLATE",
    0x0063 => "OBJPROTECT",
    0x007D => "COLINFO",
    0x007E => "RK",
    0x007F => "IMDATA",
    0x0080 => "GUTS",
    0x0081 => "WSBOOL",
    0x0082 => "GRIDSET",
    0x0083 => "HCENTER",
    0x0084 => "VCENTER",
    0x0085 => "BOUNDSHEET",
    0x0086 => "WRITEPROT",
    0x0087 => "ADDIN",
    0x0088 => "EDG",
    0x0089 => "PUB",
    0x008C => "COUNTRY",
    0x008D => "HIDEOBJ",
    0x008E => "BUNDLESOFFSET",
    0x008F => "BUNDLEHEADER",
    0x0090 => "SORT",
    0x0091 => "SUB",
    0x0092 => "PALETTE",
    0x0093 => "STYLE",
    0x0094 => "LHRECORD",
    0x0095 => "LHNGRAPH",
    0x0096 => "SOUND",
    0x0098 => "LPR",
    0x0099 => "STANDARDWIDTH",
    0x009A => "FNGROUPNAME",
    0x009B => "FILTERMODE",
    0x009C => "FNGROUPCOUNT",
    0x009D => "AUTOFILTERINFO",
    0x009E => "AUTOFILTER",
    0x00A0 => "SCL",
    0x00A1 => "SETUP",
    0x00A9 => "COORDLIST",
    0x00AB => "GCW",
    0x00AE => "SCENMAN",
    0x00AF => "SCENARIO",
    0x00B0 => "SXVIEW",
    0x00B1 => "SXVD",
    0x00B2 => "SXVI",
    0x00B4 => "SXIVD",
    0x00B5 => "SXLI",
    0x00B6 => "SXPI",
    0x00B8 => "DOCROUTE",
    0x00B9 => "RECIPNAME",
    0x00BC => "SHRFMLA",
    0x00BD => "MULRK",
    0x00BE => "MULBLANK",
    0x00C1 => "MMS",
    0x00C2 => "ADDMENU",
    0x00C3 => "DELMENU",
    0x00C5 => "SXDI",
    0x00C6 => "SXDB",
    0x00C7 => "SXFIELD",
    0x00C8 => "SXINDEXLIST",
    0x00C9 => "SXDOUBLE",
    0x00CD => "SXSTRING",
    0x00CE => "SXDATETIME",
    0x00D0 => "SXTBL",
    0x00D1 => "SXTBRGITEM",
    0x00D2 => "SXTBPG",
    0x00D3 => "OBPROJ",
    0x00D5 => "SXIDSTM",
    0x00D6 => "RSTRING",
    0x00D7 => "DBCELL",
    0x00DA => "BOOKBOOL",
    0x00DC => "SXEXT|PARAMQRY",
    0x00DD => "SCENPROTECT",
    0x00DE => "OLESIZE",
    0x00DF => "UDDESC",
    0x00E0 => "XF",
    0x00E1 => "INTERFACEHDR",
    0x00E2 => "INTERFACEEND",
    0x00E3 => "SXVS",
    0x00E5 => "MERGEDCELLS",
    0x00E9 => "BITMAP",
    0x00EB => "MSODRAWINGGROUP",
    0x00EC => "MSODRAWING",
    0x00ED => "MSODRAWINGSELECTION",
    0x00F0 => "SXRULE",
    0x00F1 => "SXEX",
    0x00F2 => "SXFILT",
    0x00F6 => "SXNAME",
    0x00F7 => "SXSELECT",
    0x00F8 => "SXPAIR",
    0x00F9 => "SXFMLA",
    0x00FB => "SXFORMAT",
    0x00FC => "SST",
    0x00FD => "LABELSST",
    0x00FF => "EXTSST",
    0x0100 => "SXVDEX",
    0x0103 => "SXFORMULA",
    0x0122 => "SXDBEX",
    0x0137 => "CHTRINSERT",
    0x0138 => "CHTRINFO",
    0x013B => "CHTRCELLCONTENT",
    0x013D => "TABID",
    0x0140 => "CHTRMOVERANGE",
    0x014D => "CHTRINSERTTAB",
    0x015F => "LABELRANGES",
    0x0160 => "USESELFS",
    0x0161 => "DSF",
    0x0162 => "XL5MODIFY",
    0x0196 => "CHTRHEADER",
    0x01A9 => "USERBVIEW",
    0x01AA => "USERSVIEWBEGIN",
    0x01AB => "USERSVIEWEND",
    0x01AD => "QSI",
    0x01AE => "SUPBOOK",
    0x01AF => "PROT4REV",
    0x01B0 => "CONDFMT",
    0x01B1 => "CF",
    0x01B2 => "DVAL",
    0x01B5 => "DCONBIN",
    0x01B6 => "TXO",
    0x01B7 => "REFRESHALL",
    0x01B8 => "HLINK",
    0x01BA => "CODENAME",
    0x01BB => "SXFDBTYPE",
    0x01BC => "PROT4REVPASS",
    0x01BE => "DV",
    0x01C0 => "XL9FILE",
    0x01C1 => "RECALCID",
    0x0200 => "DIMENSIONS",
    0x0201 => "BLANK",
    0x0203 => "NUMBER",
    0x0204 => "LABEL",
    0x0205 => "BOOLERR",
    0x0206 => "FORMULA",
    0x0207 => "STRING",
    0x0208 => "ROW",
    0x0209 => "BOF",
    0x020B => "INDEX",
    0x0218 => "NAME",
    0x0221 => "ARRAY",
    0x0223 => "EXTERNNAME",
    0x0225 => "DEFAULTROWHEIGHT",
    0x0231 => "FONT",
    0x0236 => "TABLE",
    0x023E => "WINDOW2",
    0x0243 => "XF",
    0x027E => "RK",
    0x0293 => "STYLE",
    0x0406 => "FORMULA",
    0x0409 => "BOF",
    0x041E => "FORMAT",
    0x0443 => "XF",
    0x04BC => "SHRFMLA",
    0x0800 => "SCREENTIP",
    0x0803 => "WEBQRYSETTINGS",
    0x0804 => "WEBQRYTABLES",
    0x0809 => "BOF",
    0x0862 => "SHEETLAYOUT",
    0x0867 => "SHEETPROTECTION",
    0x1001 => "UNITS",
    0x1002 => "ChartChart",
    0x1003 => "ChartSeries",
    0x1006 => "ChartDataformat",
    0x1007 => "ChartLineformat",
    0x1009 => "ChartMarkerformat",
    0x100A => "ChartAreaformat",
    0x100B => "ChartPieformat",
    0x100C => "ChartAttachedlabel",
    0x100D => "ChartSeriestext",
    0x1014 => "ChartChartformat",
    0x1015 => "ChartLegend",
    0x1016 => "ChartSerieslist",
    0x1017 => "ChartBar",
    0x1018 => "ChartLine",
    0x1019 => "ChartPie",
    0x101A => "ChartArea",
    0x101B => "ChartScatter",
    0x101C => "ChartChartline",
    0x101D => "ChartAxis",
    0x101E => "ChartTick",
    0x101F => "ChartValuerange",
    0x1020 => "ChartCatserrange",
    0x1021 => "ChartAxislineformat",
    0x1022 => "ChartFormatlink",
    0x1024 => "ChartDefaulttext",
    0x1025 => "ChartText",
    0x1026 => "ChartFontx",
    0x1027 => "ChartObjectLink",
    0x1032 => "ChartFrame",
    0x1033 => "BEGIN",
    0x1034 => "END",
    0x1035 => "ChartPlotarea",
    0x103A => "Chart3D",
    0x103C => "ChartPicf",
    0x103D => "ChartDropbar",
    0x103E => "ChartRadar",
    0x103F => "ChartSurface",
    0x1040 => "ChartRadararea",
    0x1041 => "ChartAxisparent",
    0x1043 => "ChartLegendxn",
    0x1044 => "ChartShtprops",
    0x1045 => "ChartSertocrt",
    0x1046 => "ChartAxesused",
    0x1048 => "ChartSbaseref",
    0x104A => "ChartSerparent",
    0x104B => "ChartSerauxtrend",
    0x104E => "ChartIfmt",
    0x104F => "ChartPos",
    0x1050 => "ChartAlruns",
    0x1051 => "ChartAI",
    0x105B => "ChartSerauxerrbar",
    0x105D => "ChartSerfmt",
    0x105F => "Chart3DDataFormat",
    0x1060 => "ChartFbi",
    0x1061 => "ChartBoppop",
    0x1062 => "ChartAxcext",
    0x1063 => "ChartDat",
    0x1064 => "ChartPlotgrowth",
    0x1065 => "ChartSiindex",
    0x1066 => "ChartGelframe",
    0x1067 => "ChartBoppcustom",
    0xFFFF => ""
}


STD_FUNC_BY_NAME = {
             "ABS" => [0x018,  1,  1,   "V",             "V", false], # 1
            "ACOS" => [0x063,  1,  1,   "V",             "V", false], # 2
           "ACOSH" => [0x0e9,  1,  1,   "V",             "V", false], # 3
         "ADDRESS" => [0x0db,  2,  5,   "V",     "V V V V V", false], # 4
             "AND" => [0x024,  1, 30,   "V",         "R ...", false], # 5
          "ARCTAN" => [0x012,  1,  1,   "V",             "V", false], # 6
           "AREAS" => [0x04b,  1,  1,   "V",             "R", false], # 7
             "ASC" => [0x0d6,  1,  1,   "V",             "V", false], # 8
            "ASIN" => [0x062,  1,  1,   "V",             "V", false], # 9
           "ASINH" => [0x0e8,  1,  1,   "V",             "V", false], # 10
           "ATAN2" => [0x061,  2,  2,   "V",           "V V", false], # 11
           "ATANH" => [0x0ea,  1,  1,   "V",             "V", false], # 12
          "AVEDEV" => [0x10d,  1, 30,   "V",         "R ...", false], # 13
         "AVERAGE" => [0x005,  1, 30,   "V",         "R ...", false], # 14
        "AVERAGEA" => [0x169,  1, 30,   "V",         "R ...", false], # 15
        "BETADIST" => [0x10e,  3,  5,   "V",     "V V V V V", false], # 16
         "BETAINV" => [0x110,  3,  5,   "V",     "V V V V V", false], # 17
       "BINOMDIST" => [0x111,  4,  4,   "V",       "V V V V", false], # 18
         "CEILING" => [0x120,  2,  2,   "V",           "V V", false], # 19
            "CELL" => [0x07d,  1,  2,   "V",           "V R",  true], # 20
            "CHAR" => [0x06f,  1,  1,   "V",             "V", false], # 21
         "CHIDIST" => [0x112,  2,  2,   "V",           "V V", false], # 22
          "CHIINV" => [0x113,  2,  2,   "V",           "V V", false], # 23
         "CHITEST" => [0x132,  2,  2,   "V",           "A A", false], # 24
          "CHOOSE" => [0x064,  2, 30,   "R",       "V R ...", false], # 25
           "CLEAN" => [0x0a2,  1,  1,   "V",             "V", false], # 26
            "CODE" => [0x079,  1,  1,   "V",             "V", false], # 27
          "COLUMN" => [0x009,  0,  1,   "V",             "R", false], # 28
         "COLUMNS" => [0x04d,  1,  1,   "V",             "R", false], # 29
          "COMBIN" => [0x114,  2,  2,   "V",           "V V", false], # 30
     "CONCATENATE" => [0x150,  0, 30,   "V",         "V ...", false], # 31
      "CONFIDENCE" => [0x115,  3,  3,   "V",         "V V V", false], # 32
          "CORREL" => [0x133,  2,  2,   "V",           "A A", false], # 33
             "COS" => [0x010,  1,  1,   "V",             "V", false], # 34
            "COSH" => [0x0e6,  1,  1,   "V",             "V", false], # 35
           "COUNT" => [0x000,  0, 30,   "V",         "R ...", false], # 36
          "COUNTA" => [0x0a9,  0, 30,   "V",         "R ...", false], # 37
      "COUNTBLANK" => [0x15b,  1,  1,   "V",             "R", false], # 38
         "COUNTIF" => [0x15a,  2,  2,   "V",           "R V", false], # 39
           "COVAR" => [0x134,  2,  2,   "V",           "A A", false], # 40
       "CRITBINOM" => [0x116,  3,  3,   "V",         "V V V", false], # 41
            "DATE" => [0x041,  3,  3,   "V",         "V V V", false], # 42
         "DATEDIF" => [0x15f,  3,  3,   "V",         "V V V", false], # 43
      "DATESTRING" => [0x160,  1,  1,   "V",             "V", false], # 44
       "DATEVALUE" => [0x08c,  1,  1,   "V",             "V", false], # 45
        "DAVERAGE" => [0x02a,  3,  3,   "V",         "R R R", false], # 46
             "DAY" => [0x043,  1,  1,   "V",             "V", false], # 47
         "DAYS360" => [0x0dc,  2,  3,   "V",         "V V V", false], # 48
              "DB" => [0x0f7,  4,  5,   "V",     "V V V V V", false], # 49
            "DBSC" => [0x0d7,  1,  1,   "V",             "V", false], # 50
          "DCOUNT" => [0x028,  3,  3,   "V",         "R R R", false], # 51
         "DCOUNTA" => [0x0c7,  3,  3,   "V",         "R R R", false], # 52
             "DDB" => [0x090,  4,  5,   "V",     "V V V V V", false], # 53
         "DEGREES" => [0x157,  1,  1,   "V",             "V", false], # 54
           "DEVSQ" => [0x13e,  1, 30,   "V",         "R ...", false], # 55
            "DGET" => [0x0eb,  3,  3,   "V",         "R R R", false], # 56
            "DMAX" => [0x02c,  3,  3,   "V",         "R R R", false], # 57
            "DMIN" => [0x02b,  3,  3,   "V",         "R R R", false], # 58
          "DOLLAR" => [0x00d,  1,  2,   "V",           "V V", false], # 59
        "DPRODUCT" => [0x0bf,  3,  3,   "V",         "R R R", false], # 60
          "DSTDEV" => [0x02d,  3,  3,   "V",         "R R R", false], # 61
         "DSTDEVP" => [0x0c3,  3,  3,   "V",         "R R R", false], # 62
            "DSUM" => [0x029,  3,  3,   "V",         "R R R", false], # 63
            "DVAR" => [0x02f,  3,  3,   "V",         "R R R", false], # 64
           "DVARP" => [0x0c4,  3,  3,   "V",         "R R R", false], # 65
      "ERROR.TYPE" => [0x105,  1,  1,   "V",             "V", false], # 66
            "EVEN" => [0x117,  1,  1,   "V",             "V", false], # 67
           "EXACT" => [0x075,  2,  2,   "V",           "V V", false], # 68
             "EXP" => [0x015,  1,  1,   "V",             "V", false], # 69
       "EXPONDIST" => [0x118,  3,  3,   "V",         "V V V", false], # 70
            "FACT" => [0x0b8,  1,  1,   "V",             "V", false], # 71
           "FALSE" => [0x023,  0,  0,   "V",             "-", false], # 72
           "FDIST" => [0x119,  3,  3,   "V",         "V V V", false], # 73
            "FIND" => [0x07c,  2,  3,   "V",         "V V V", false], # 74
           "FINDB" => [0x0cd,  2,  3,   "V",         "V V V", false], # 75
            "FINV" => [0x11a,  3,  3,   "V",         "V V V", false], # 76
          "FISHER" => [0x11b,  1,  1,   "V",             "V", false], # 77
       "FISHERINV" => [0x11c,  1,  1,   "V",             "V", false], # 78
           "FIXED" => [0x00e,  2,  3,   "V",         "V V V", false], # 79
           "FLOOR" => [0x11d,  2,  2,   "V",           "V V", false], # 80
        "FORECAST" => [0x135,  3,  3,   "V",         "V A A", false], # 81
       "FREQUENCY" => [0x0fc,  2,  2,   "A",           "R R", false], # 82
           "FTEST" => [0x136,  2,  2,   "V",           "A A", false], # 83
              "FV" => [0x039,  3,  5,   "V",     "V V V V V", false], # 84
       "GAMMADIST" => [0x11e,  4,  4,   "V",       "V V V V", false], # 85
        "GAMMAINV" => [0x11f,  3,  3,   "V",         "V V V", false], # 86
         "GAMMALN" => [0x10f,  1,  1,   "V",             "V", false], # 87
         "GEOMEAN" => [0x13f,  1, 30,   "V",         "R ...", false], # 88
    "GETPIVOTDATA" => [0x166,  2, 30,   "A",             "-", false], # 89
          "GROWTH" => [0x034,  1,  4,   "A",       "R R R V", false], # 90
         "HARMEAN" => [0x140,  1, 30,   "V",         "R ...", false], # 91
         "HLOOKUP" => [0x065,  3,  4,   "V",       "V R R V", false], # 92
            "HOUR" => [0x047,  1,  1,   "V",             "V", false], # 93
       "HYPERLINK" => [0x167,  1,  2,   "V",           "V V", false], # 94
     "HYPGEOMVERT" => [0x121,  4,  4,   "V",       "V V V V", false], # 95
              "IF" => [0x001,  2,  3,   "V",         "V V V", false], # 96
           "INDEX" => [0x01d,  2,  4,   "R",       "R V V V", false], # 97
        "INDIRECT" => [0x094,  1,  2,   "R",           "V V",  true], # 98
            "INFO" => [0x0f4,  1,  1,   "V",             "V", false], # 99
             "INT" => [0x019,  1,  1,   "V",             "V", false], # 100
       "INTERCEPT" => [0x137,  2,  2,   "V",           "A A", false], # 101
            "IPMT" => [0x0a7,  4,  6,   "V",   "V V V V V V", false], # 102
             "IRR" => [0x03e,  1,  2,   "V",           "R V", false], # 103
         "ISBLANK" => [0x081,  1,  1,   "V",             "V", false], # 104
           "ISERR" => [0x07e,  1,  1,   "V",             "V", false], # 105
         "ISERROR" => [0x003,  1,  1,   "V",             "V", false], # 106
       "ISLOGICAL" => [0x0c6,  1,  1,   "V",             "V", false], # 107
            "ISNA" => [0x002,  1,  1,   "V",             "V", false], # 108
       "ISNONTEXT" => [0x0c0,  1,  1,   "V",             "V", false], # 109
        "ISNUMBER" => [0x080,  1,  1,   "V",             "V", false], # 110
           "ISPMT" => [0x15e,  4,  4,   "V",       "V V V V", false], # 111
           "ISREF" => [0x069,  1,  1,   "V",             "R", false], # 112
          "ISTEXT" => [0x07f,  1,  1,   "V",             "V", false], # 113
            "KURT" => [0x142,  1, 30,   "V",         "R ...", false], # 114
           "LARGE" => [0x145,  2,  2,   "V",           "R V", false], # 115
            "LEFT" => [0x073,  1,  2,   "V",           "V V", false], # 116
           "LEFTB" => [0x0d0,  1,  2,   "V",           "V V", false], # 117
             "LEN" => [0x020,  1,  1,   "V",             "V", false], # 118
            "LENB" => [0x0d3,  1,  1,   "V",             "V", false], # 119
          "LINEST" => [0x031,  1,  4,   "A",       "R R V V", false], # 120
              "LN" => [0x016,  1,  1,   "V",             "V", false], # 121
             "LOG" => [0x06d,  1,  2,   "V",           "V V", false], # 122
           "LOG10" => [0x017,  1,  1,   "V",             "V", false], # 123
          "LOGEST" => [0x033,  1,  4,   "A",       "R R V V", false], # 124
          "LOGINV" => [0x123,  3,  3,   "V",         "V V V", false], # 125
     "LOGNORMDIST" => [0x122,  3,  3,   "V",         "V V V", false], # 126
          "LOOKUP" => [0x01c,  2,  3,   "V",         "V R R", false], # 127
           "LOWER" => [0x070,  1,  1,   "V",             "V", false], # 128
           "MATCH" => [0x040,  2,  3,   "V",         "V R R", false], # 129
             "MAX" => [0x007,  1, 30,   "V",         "R ...", false], # 130
            "MAXA" => [0x16a,  1, 30,   "V",         "R ...", false], # 131
         "MDETERM" => [0x0a3,  1,  1,   "V",             "A", false], # 132
          "MEDIAN" => [0x0e3,  1, 30,   "V",         "R ...", false], # 133
             "MID" => [0x01f,  3,  3,   "V",         "V V V", false], # 134
            "MIDB" => [0x0d2,  3,  3,   "V",         "V V V", false], # 135
             "MIN" => [0x006,  1, 30,   "V",         "R ...", false], # 136
            "MINA" => [0x16b,  1, 30,   "V",         "R ...", false], # 137
          "MINUTE" => [0x048,  1,  1,   "V",             "V", false], # 138
        "MINVERSE" => [0x0a4,  1,  1,   "A",             "A", false], # 139
            "MIRR" => [0x03d,  3,  3,   "V",         "R V V", false], # 140
           "MMULT" => [0x0a5,  2,  2,   "A",           "A A", false], # 141
       "MNORMSINV" => [0x128,  1,  1,   "V",             "V", false], # 142
             "MOD" => [0x027,  2,  2,   "V",           "V V", false], # 143
            "MODE" => [0x14a,  1, 30,   "V",         "A ...", false], # 144
           "MONTH" => [0x044,  1,  1,   "V",             "V", false], # 145
               "N" => [0x083,  1,  1,   "V",             "R", false], # 146
              "NA" => [0x00a,  0,  0,   "V",             "-", false], # 147
    "NEGBINOMDIST" => [0x124,  3,  3,   "V",         "V V V", false], # 148
        "NORMDIST" => [0x125,  4,  4,   "V",       "V V V V", false], # 149
         "NORMINV" => [0x127,  3,  3,   "V",         "V V V", false], # 150
       "NORMSDIST" => [0x126,  1,  1,   "V",             "V", false], # 151
             "NOT" => [0x026,  1,  1,   "V",             "V", false], # 152
             "NOW" => [0x04a,  0,  0,   "V",             "-",  true], # 153
            "NPER" => [0x03a,  3,  5,   "V",     "V V V V V", false], # 154
             "NPV" => [0x00b,  2, 30,   "V",       "V R ...", false], # 155
    "NUMBERSTRING" => [0x161,  2,  2,   "V",           "V V", false], # 156
             "ODD" => [0x12a,  1,  1,   "V",             "V", false], # 157
          "OFFSET" => [0x04e,  3,  5,   "R",     "R V V V V",  true], # 158
              "OR" => [0x025,  1, 30,   "V",         "R ...", false], # 159
         "PEARSON" => [0x138,  2,  2,   "V",           "A A", false], # 160
      "PERCENTILE" => [0x148,  2,  2,   "V",           "R V", false], # 161
     "PERCENTRANK" => [0x149,  2,  3,   "V",         "R V V", false], # 162
          "PERMUT" => [0x12b,  2,  2,   "V",           "V V", false], # 163
        "PHONETIC" => [0x168,  1,  1,   "V",             "R", false], # 164
              "PI" => [0x013,  0,  0,   "V",             "-", false], # 165
             "PMT" => [0x03b,  3,  5,   "V",     "V V V V V", false], # 166
         "POISSON" => [0x12c,  3,  3,   "V",         "V V V", false], # 167
           "POWER" => [0x151,  2,  2,   "V",           "V V", false], # 168
            "PPMT" => [0x0a8,  4,  6,   "V",   "V V V V V V", false], # 169
            "PROB" => [0x13d,  3,  4,   "V",       "A A V V", false], # 170
         "PRODUCT" => [0x0b7,  0, 30,   "V",         "R ...", false], # 171
          "PROPER" => [0x072,  1,  1,   "V",             "V", false], # 172
              "PV" => [0x038,  3,  5,   "V",     "V V V V V", false], # 173
        "QUARTILE" => [0x147,  2,  2,   "V",           "R V", false], # 174
         "RADIANS" => [0x156,  1,  1,   "V",             "V", false], # 175
            "RAND" => [0x03f,  0,  0,   "V",             "-",  true], # 176
            "RANK" => [0x0d8,  2,  3,   "V",         "V R V", false], # 177
            "RATE" => [0x03c,  3,  6,   "V",   "V V V V V V", false], # 178
         "REPLACE" => [0x077,  4,  4,   "V",       "V V V V", false], # 179
        "REPLACEB" => [0x0cf,  4,  4,   "V",       "V V V V", false], # 180
            "REPT" => [0x01e,  2,  2,   "V",           "V V", false], # 181
           "RIGHT" => [0x074,  1,  2,   "V",           "V V", false], # 182
          "RIGHTB" => [0x0d1,  1,  2,   "V",           "V V", false], # 183
           "ROMAN" => [0x162,  1,  2,   "V",           "V V", false], # 184
           "ROUND" => [0x01b,  2,  2,   "V",           "V V", false], # 185
       "ROUNDDOWN" => [0x0d5,  2,  2,   "V",           "V V", false], # 186
         "ROUNDUP" => [0x0d4,  2,  2,   "V",           "V V", false], # 187
             "ROW" => [0x008,  0,  1,   "V",             "R", false], # 188
            "ROWS" => [0x04c,  1,  1,   "V",             "R", false], # 189
             "RSQ" => [0x139,  2,  2,   "V",           "A A", false], # 190
          "SEARCH" => [0x052,  2,  3,   "V",         "V V V", false], # 191
         "SEARCHB" => [0x0ce,  2,  3,   "V",         "V V V", false], # 192
          "SECOND" => [0x049,  1,  1,   "V",             "V", false], # 193
            "SIGN" => [0x01a,  1,  1,   "V",             "V", false], # 194
             "SIN" => [0x00f,  1,  1,   "V",             "V", false], # 195
            "SINH" => [0x0e5,  1,  1,   "V",             "V", false], # 196
            "SKEW" => [0x143,  1, 30,   "V",         "R ...", false], # 197
             "SLN" => [0x08e,  3,  3,   "V",         "V V V", false], # 198
           "SLOPE" => [0x13b,  2,  2,   "V",           "A A", false], # 199
           "SMALL" => [0x146,  2,  2,   "V",           "R V", false], # 200
            "SQRT" => [0x014,  1,  1,   "V",             "V", false], # 201
     "STANDARDIZE" => [0x129,  3,  3,   "V",         "V V V", false], # 202
           "STDEV" => [0x00c,  1, 30,   "V",         "R ...", false], # 203
          "STDEVA" => [0x16e,  1, 30,   "V",         "R ...", false], # 204
          "STDEVP" => [0x0c1,  1, 30,   "V",         "R ...", false], # 205
         "STDEVPA" => [0x16c,  1, 30,   "V",         "R ...", false], # 206
           "STEYX" => [0x13a,  2,  2,   "V",           "A A", false], # 207
      "SUBSTITUTE" => [0x078,  3,  4,   "V",       "V V V V", false], # 208
        "SUBTOTAL" => [0x158,  2, 30,   "V",       "V R ...", false], # 209
             "SUM" => [0x004,  0, 30,   "V",         "R ...", false], # 210
           "SUMIF" => [0x159,  2,  3,   "V",         "R V R", false], # 211
      "SUMPRODUCT" => [0x0e4,  1, 30,   "V",         "A ...", false], # 212
           "SUMSQ" => [0x141,  0, 30,   "V",         "R ...", false], # 213
        "SUMX2MY2" => [0x130,  2,  2,   "V",           "A A", false], # 214
        "SUMX2PY2" => [0x131,  2,  2,   "V",           "A A", false], # 215
         "SUMXMY2" => [0x12f,  2,  2,   "V",           "A A", false], # 216
             "SYD" => [0x08f,  4,  4,   "V",       "V V V V", false], # 217
               "T" => [0x082,  1,  1,   "V",             "R", false], # 218
             "TAN" => [0x011,  1,  1,   "V",             "V", false], # 219
            "TANH" => [0x0e7,  1,  1,   "V",             "V", false], # 220
           "TDIST" => [0x12d,  3,  3,   "V",         "V V V", false], # 221
            "TEXT" => [0x030,  2,  2,   "V",           "V V", false], # 222
            "TIME" => [0x042,  3,  3,   "V",         "V V V", false], # 223
       "TIMEVALUE" => [0x08d,  1,  1,   "V",             "V", false], # 224
            "TINV" => [0x14c,  2,  2,   "V",           "V V", false], # 225
           "TODAY" => [0x0dd,  0,  0,   "V",             "-",  true], # 226
       "TRANSPOSE" => [0x053,  1,  1,   "A",             "A", false], # 227
           "TREND" => [0x032,  1,  4,   "A",       "R R R V", false], # 228
            "TRIM" => [0x076,  1,  1,   "V",             "V", false], # 229
        "TRIMMEAN" => [0x14b,  2,  2,   "V",           "R V", false], # 230
            "TRUE" => [0x022,  0,  0,   "V",             "-", false], # 231
           "TRUNC" => [0x0c5,  1,  2,   "V",           "V V", false], # 232
           "TTEST" => [0x13c,  4,  4,   "V",       "A A V V", false], # 233
            "TYPE" => [0x056,  1,  1,   "V",             "V", false], # 234
           "UPPER" => [0x071,  1,  1,   "V",             "V", false], # 235
        "USDOLLAR" => [0x0cc,  1,  2,   "V",           "V V", false], # 236
           "VALUE" => [0x021,  1,  1,   "V",             "V", false], # 237
             "VAR" => [0x02e,  1, 30,   "V",         "R ...", false], # 238
            "VARA" => [0x16f,  1, 30,   "V",         "R ...", false], # 239
            "VARP" => [0x0c2,  1, 30,   "V",         "R ...", false], # 240
           "VARPA" => [0x16d,  1, 30,   "V",         "R ...", false], # 241
             "VDB" => [0x0de,  5,  7,   "V", "V V V V V V V", false], # 242
         "VLOOKUP" => [0x066,  3,  4,   "V",       "V R R V", false], # 243
         "WEEKDAY" => [0x046,  1,  2,   "V",           "V V", false], # 244
         "WEIBULL" => [0x12e,  4,  4,   "V",       "V V V V", false], # 245
            "YEAR" => [0x045,  1,  1,   "V",             "V", false], # 246
           "ZTEST" => [0x144,  2,  3,   "V",         "R V V", false]  # 247
}


STD_FUNC_BY_NUM = {
    0x000 => [       "COUNT",  0, 30,   "V",         "R ...", false], # 1
    0x001 => [          "IF",  2,  3,   "R",         "V R R", false], # 2
    0x002 => [        "ISNA",  1,  1,   "V",             "V", false], # 3
    0x003 => [     "ISERROR",  1,  1,   "V",             "V", false], # 4
    0x004 => [         "SUM",  0, 30,   "V",         "R ...", false], # 5
    0x005 => [     "AVERAGE",  1, 30,   "V",         "R ...", false], # 6
    0x006 => [         "MIN",  1, 30,   "V",         "R ...", false], # 7
    0x007 => [         "MAX",  1, 30,   "V",         "R ...", false], # 8
    0x008 => [         "ROW",  0,  1,   "V",             "R", false], # 9
    0x009 => [      "COLUMN",  0,  1,   "V",             "R", false], # 10
    0x00a => [          "NA",  0,  0,   "V",             "-", false], # 11
    0x00b => [         "NPV",  2, 30,   "V",       "V R ...", false], # 12
    0x00c => [       "STDEV",  1, 30,   "V",         "R ...", false], # 13
    0x00d => [      "DOLLAR",  1,  2,   "V",           "V V", false], # 14
    0x00e => [       "FIXED",  2,  3,   "V",         "V V V", false], # 15
    0x00f => [         "SIN",  1,  1,   "V",             "V", false], # 16
    0x010 => [         "COS",  1,  1,   "V",             "V", false], # 17
    0x011 => [         "TAN",  1,  1,   "V",             "V", false], # 18
    0x012 => [      "ARCTAN",  1,  1,   "V",             "V", false], # 19
    0x013 => [          "PI",  0,  0,   "V",             "-", false], # 20
    0x014 => [        "SQRT",  1,  1,   "V",             "V", false], # 21
    0x015 => [         "EXP",  1,  1,   "V",             "V", false], # 22
    0x016 => [          "LN",  1,  1,   "V",             "V", false], # 23
    0x017 => [       "LOG10",  1,  1,   "V",             "V", false], # 24
    0x018 => [         "ABS",  1,  1,   "V",             "V", false], # 25
    0x019 => [         "INT",  1,  1,   "V",             "V", false], # 26
    0x01a => [        "SIGN",  1,  1,   "V",             "V", false], # 27
    0x01b => [       "ROUND",  2,  2,   "V",           "V V", false], # 28
    0x01c => [      "LOOKUP",  2,  3,   "V",         "V R R", false], # 29
    0x01d => [       "INDEX",  2,  4,   "R",       "R V V V", false], # 30
    0x01e => [        "REPT",  2,  2,   "V",           "V V", false], # 31
    0x01f => [         "MID",  3,  3,   "V",         "V V V", false], # 32
    0x020 => [         "LEN",  1,  1,   "V",             "V", false], # 33
    0x021 => [       "VALUE",  1,  1,   "V",             "V", false], # 34
    0x022 => [        "TRUE",  0,  0,   "V",             "-", false], # 35
    0x023 => [       "FALSE",  0,  0,   "V",             "-", false], # 36
    0x024 => [         "AND",  1, 30,   "V",         "R ...", false], # 37
    0x025 => [          "OR",  1, 30,   "V",         "R ...", false], # 38
    0x026 => [         "NOT",  1,  1,   "V",             "V", false], # 39
    0x027 => [         "MOD",  2,  2,   "V",           "V V", false], # 40
    0x028 => [      "DCOUNT",  3,  3,   "V",         "R R R", false], # 41
    0x029 => [        "DSUM",  3,  3,   "V",         "R R R", false], # 42
    0x02a => [    "DAVERAGE",  3,  3,   "V",         "R R R", false], # 43
    0x02b => [        "DMIN",  3,  3,   "V",         "R R R", false], # 44
    0x02c => [        "DMAX",  3,  3,   "V",         "R R R", false], # 45
    0x02d => [      "DSTDEV",  3,  3,   "V",         "R R R", false], # 46
    0x02e => [         "VAR",  1, 30,   "V",         "R ...", false], # 47
    0x02f => [        "DVAR",  3,  3,   "V",         "R R R", false], # 48
    0x030 => [        "TEXT",  2,  2,   "V",           "V V", false], # 49
    0x031 => [      "LINEST",  1,  4,   "A",       "R R V V", false], # 50
    0x032 => [       "TREND",  1,  4,   "A",       "R R R V", false], # 51
    0x033 => [      "LOGEST",  1,  4,   "A",       "R R V V", false], # 52
    0x034 => [      "GROWTH",  1,  4,   "A",       "R R R V", false], # 53
    0x038 => [          "PV",  3,  5,   "V",     "V V V V V", false], # 54
    0x039 => [          "FV",  3,  5,   "V",     "V V V V V", false], # 55
    0x03a => [        "NPER",  3,  5,   "V",     "V V V V V", false], # 56
    0x03b => [         "PMT",  3,  5,   "V",     "V V V V V", false], # 57
    0x03c => [        "RATE",  3,  6,   "V",   "V V V V V V", false], # 58
    0x03d => [        "MIRR",  3,  3,   "V",         "R V V", false], # 59
    0x03e => [         "IRR",  1,  2,   "V",           "R V", false], # 60
    0x03f => [        "RAND",  0,  0,   "V",             "-",  true], # 61
    0x040 => [       "MATCH",  2,  3,   "V",         "V R R", false], # 62
    0x041 => [        "DATE",  3,  3,   "V",         "V V V", false], # 63
    0x042 => [        "TIME",  3,  3,   "V",         "V V V", false], # 64
    0x043 => [         "DAY",  1,  1,   "V",             "V", false], # 65
    0x044 => [       "MONTH",  1,  1,   "V",             "V", false], # 66
    0x045 => [        "YEAR",  1,  1,   "V",             "V", false], # 67
    0x046 => [     "WEEKDAY",  1,  2,   "V",           "V V", false], # 68
    0x047 => [        "HOUR",  1,  1,   "V",             "V", false], # 69
    0x048 => [      "MINUTE",  1,  1,   "V",             "V", false], # 70
    0x049 => [      "SECOND",  1,  1,   "V",             "V", false], # 71
    0x04a => [         "NOW",  0,  0,   "V",             "-",  true], # 72
    0x04b => [       "AREAS",  1,  1,   "V",             "R", false], # 73
    0x04c => [        "ROWS",  1,  1,   "V",             "R", false], # 74
    0x04d => [     "COLUMNS",  1,  1,   "V",             "R", false], # 75
    0x04e => [      "OFFSET",  3,  5,   "R",     "R V V V V",  true], # 76
    0x052 => [      "SEARCH",  2,  3,   "V",         "V V V", false], # 77
    0x053 => [   "TRANSPOSE",  1,  1,   "A",             "A", false], # 78
    0x056 => [        "TYPE",  1,  1,   "V",             "V", false], # 79
    0x061 => [       "ATAN2",  2,  2,   "V",           "V V", false], # 80
    0x062 => [        "ASIN",  1,  1,   "V",             "V", false], # 81
    0x063 => [        "ACOS",  1,  1,   "V",             "V", false], # 82
    0x064 => [      "CHOOSE",  2, 30,   "R",       "V R ...", false], # 83
    0x065 => [     "HLOOKUP",  3,  4,   "V",       "V R R V", false], # 84
    0x066 => [     "VLOOKUP",  3,  4,   "V",       "V R R V", false], # 85
    0x069 => [       "ISREF",  1,  1,   "V",             "R", false], # 86
    0x06d => [         "LOG",  1,  2,   "V",           "V V", false], # 87
    0x06f => [        "CHAR",  1,  1,   "V",             "V", false], # 88
    0x070 => [       "LOWER",  1,  1,   "V",             "V", false], # 89
    0x071 => [       "UPPER",  1,  1,   "V",             "V", false], # 90
    0x072 => [      "PROPER",  1,  1,   "V",             "V", false], # 91
    0x073 => [        "LEFT",  1,  2,   "V",           "V V", false], # 92
    0x074 => [       "RIGHT",  1,  2,   "V",           "V V", false], # 93
    0x075 => [       "EXACT",  2,  2,   "V",           "V V", false], # 94
    0x076 => [        "TRIM",  1,  1,   "V",             "V", false], # 95
    0x077 => [     "REPLACE",  4,  4,   "V",       "V V V V", false], # 96
    0x078 => [  "SUBSTITUTE",  3,  4,   "V",       "V V V V", false], # 97
    0x079 => [        "CODE",  1,  1,   "V",             "V", false], # 98
    0x07c => [        "FIND",  2,  3,   "V",         "V V V", false], # 99
    0x07d => [        "CELL",  1,  2,   "V",           "V R",  true], # 100
    0x07e => [       "ISERR",  1,  1,   "V",             "V", false], # 101
    0x07f => [      "ISTEXT",  1,  1,   "V",             "V", false], # 102
    0x080 => [    "ISNUMBER",  1,  1,   "V",             "V", false], # 103
    0x081 => [     "ISBLANK",  1,  1,   "V",             "V", false], # 104
    0x082 => [           "T",  1,  1,   "V",             "R", false], # 105
    0x083 => [           "N",  1,  1,   "V",             "R", false], # 106
    0x08c => [   "DATEVALUE",  1,  1,   "V",             "V", false], # 107
    0x08d => [   "TIMEVALUE",  1,  1,   "V",             "V", false], # 108
    0x08e => [         "SLN",  3,  3,   "V",         "V V V", false], # 109
    0x08f => [         "SYD",  4,  4,   "V",       "V V V V", false], # 110
    0x090 => [         "DDB",  4,  5,   "V",     "V V V V V", false], # 111
    0x094 => [    "INDIRECT",  1,  2,   "R",           "V V",  true], # 112
    0x0a2 => [       "CLEAN",  1,  1,   "V",             "V", false], # 113
    0x0a3 => [     "MDETERM",  1,  1,   "V",             "A", false], # 114
    0x0a4 => [    "MINVERSE",  1,  1,   "A",             "A", false], # 115
    0x0a5 => [       "MMULT",  2,  2,   "A",           "A A", false], # 116
    0x0a7 => [        "IPMT",  4,  6,   "V",   "V V V V V V", false], # 117
    0x0a8 => [        "PPMT",  4,  6,   "V",   "V V V V V V", false], # 118
    0x0a9 => [      "COUNTA",  0, 30,   "V",         "R ...", false], # 119
    0x0b7 => [     "PRODUCT",  0, 30,   "V",         "R ...", false], # 120
    0x0b8 => [        "FACT",  1,  1,   "V",             "V", false], # 121
    0x0bf => [    "DPRODUCT",  3,  3,   "V",         "R R R", false], # 122
    0x0c0 => [   "ISNONTEXT",  1,  1,   "V",             "V", false], # 123
    0x0c1 => [      "STDEVP",  1, 30,   "V",         "R ...", false], # 124
    0x0c2 => [        "VARP",  1, 30,   "V",         "R ...", false], # 125
    0x0c3 => [     "DSTDEVP",  3,  3,   "V",         "R R R", false], # 126
    0x0c4 => [       "DVARP",  3,  3,   "V",         "R R R", false], # 127
    0x0c5 => [       "TRUNC",  1,  2,   "V",           "V V", false], # 128
    0x0c6 => [   "ISLOGICAL",  1,  1,   "V",             "V", false], # 129
    0x0c7 => [     "DCOUNTA",  3,  3,   "V",         "R R R", false], # 130
    0x0cc => [    "USDOLLAR",  1,  2,   "V",           "V V", false], # 131
    0x0cd => [       "FINDB",  2,  3,   "V",         "V V V", false], # 132
    0x0ce => [     "SEARCHB",  2,  3,   "V",         "V V V", false], # 133
    0x0cf => [    "REPLACEB",  4,  4,   "V",       "V V V V", false], # 134
    0x0d0 => [       "LEFTB",  1,  2,   "V",           "V V", false], # 135
    0x0d1 => [      "RIGHTB",  1,  2,   "V",           "V V", false], # 136
    0x0d2 => [        "MIDB",  3,  3,   "V",         "V V V", false], # 137
    0x0d3 => [        "LENB",  1,  1,   "V",             "V", false], # 138
    0x0d4 => [     "ROUNDUP",  2,  2,   "V",           "V V", false], # 139
    0x0d5 => [   "ROUNDDOWN",  2,  2,   "V",           "V V", false], # 140
    0x0d6 => [         "ASC",  1,  1,   "V",             "V", false], # 141
    0x0d7 => [        "DBSC",  1,  1,   "V",             "V", false], # 142
    0x0d8 => [        "RANK",  2,  3,   "V",         "V R V", false], # 143
    0x0db => [     "ADDRESS",  2,  5,   "V",     "V V V V V", false], # 144
    0x0dc => [     "DAYS360",  2,  3,   "V",         "V V V", false], # 145
    0x0dd => [       "TODAY",  0,  0,   "V",             "-",  true], # 146
    0x0de => [         "VDB",  5,  7,   "V", "V V V V V V V", false], # 147
    0x0e3 => [      "MEDIAN",  1, 30,   "V",         "R ...", false], # 148
    0x0e4 => [  "SUMPRODUCT",  1, 30,   "V",         "A ...", false], # 149
    0x0e5 => [        "SINH",  1,  1,   "V",             "V", false], # 150
    0x0e6 => [        "COSH",  1,  1,   "V",             "V", false], # 151
    0x0e7 => [        "TANH",  1,  1,   "V",             "V", false], # 152
    0x0e8 => [       "ASINH",  1,  1,   "V",             "V", false], # 153
    0x0e9 => [       "ACOSH",  1,  1,   "V",             "V", false], # 154
    0x0ea => [       "ATANH",  1,  1,   "V",             "V", false], # 155
    0x0eb => [        "DGET",  3,  3,   "V",         "R R R", false], # 156
    0x0f4 => [        "INFO",  1,  1,   "V",             "V", false], # 157
    0x0f7 => [          "DB",  4,  5,   "V",     "V V V V V", false], # 158
    0x0fc => [   "FREQUENCY",  2,  2,   "A",           "R R", false], # 159
    0x105 => [  "ERROR.TYPE",  1,  1,   "V",             "V", false], # 160
    0x10d => [      "AVEDEV",  1, 30,   "V",         "R ...", false], # 161
    0x10e => [    "BETADIST",  3,  5,   "V",     "V V V V V", false], # 162
    0x10f => [     "GAMMALN",  1,  1,   "V",             "V", false], # 163
    0x110 => [     "BETAINV",  3,  5,   "V",     "V V V V V", false], # 164
    0x111 => [   "BINOMDIST",  4,  4,   "V",       "V V V V", false], # 165
    0x112 => [     "CHIDIST",  2,  2,   "V",           "V V", false], # 166
    0x113 => [      "CHIINV",  2,  2,   "V",           "V V", false], # 167
    0x114 => [      "COMBIN",  2,  2,   "V",           "V V", false], # 168
    0x115 => [  "CONFIDENCE",  3,  3,   "V",         "V V V", false], # 169
    0x116 => [   "CRITBINOM",  3,  3,   "V",         "V V V", false], # 170
    0x117 => [        "EVEN",  1,  1,   "V",             "V", false], # 171
    0x118 => [   "EXPONDIST",  3,  3,   "V",         "V V V", false], # 172
    0x119 => [       "FDIST",  3,  3,   "V",         "V V V", false], # 173
    0x11a => [        "FINV",  3,  3,   "V",         "V V V", false], # 174
    0x11b => [      "FISHER",  1,  1,   "V",             "V", false], # 175
    0x11c => [   "FISHERINV",  1,  1,   "V",             "V", false], # 176
    0x11d => [       "FLOOR",  2,  2,   "V",           "V V", false], # 177
    0x11e => [   "GAMMADIST",  4,  4,   "V",       "V V V V", false], # 178
    0x11f => [    "GAMMAINV",  3,  3,   "V",         "V V V", false], # 179
    0x120 => [     "CEILING",  2,  2,   "V",           "V V", false], # 180
    0x121 => [ "HYPGEOMVERT",  4,  4,   "V",       "V V V V", false], # 181
    0x122 => [ "LOGNORMDIST",  3,  3,   "V",         "V V V", false], # 182
    0x123 => [      "LOGINV",  3,  3,   "V",         "V V V", false], # 183
    0x124 => ["NEGBINOMDIST",  3,  3,   "V",         "V V V", false], # 184
    0x125 => [    "NORMDIST",  4,  4,   "V",       "V V V V", false], # 185
    0x126 => [   "NORMSDIST",  1,  1,   "V",             "V", false], # 186
    0x127 => [     "NORMINV",  3,  3,   "V",         "V V V", false], # 187
    0x128 => [   "MNORMSINV",  1,  1,   "V",             "V", false], # 188
    0x129 => [ "STANDARDIZE",  3,  3,   "V",         "V V V", false], # 189
    0x12a => [         "ODD",  1,  1,   "V",             "V", false], # 190
    0x12b => [      "PERMUT",  2,  2,   "V",           "V V", false], # 191
    0x12c => [     "POISSON",  3,  3,   "V",         "V V V", false], # 192
    0x12d => [       "TDIST",  3,  3,   "V",         "V V V", false], # 193
    0x12e => [     "WEIBULL",  4,  4,   "V",       "V V V V", false], # 194
    0x12f => [     "SUMXMY2",  2,  2,   "V",           "A A", false], # 195
    0x130 => [    "SUMX2MY2",  2,  2,   "V",           "A A", false], # 196
    0x131 => [    "SUMX2PY2",  2,  2,   "V",           "A A", false], # 197
    0x132 => [     "CHITEST",  2,  2,   "V",           "A A", false], # 198
    0x133 => [      "CORREL",  2,  2,   "V",           "A A", false], # 199
    0x134 => [       "COVAR",  2,  2,   "V",           "A A", false], # 200
    0x135 => [    "FORECAST",  3,  3,   "V",         "V A A", false], # 201
    0x136 => [       "FTEST",  2,  2,   "V",           "A A", false], # 202
    0x137 => [   "INTERCEPT",  2,  2,   "V",           "A A", false], # 203
    0x138 => [     "PEARSON",  2,  2,   "V",           "A A", false], # 204
    0x139 => [         "RSQ",  2,  2,   "V",           "A A", false], # 205
    0x13a => [       "STEYX",  2,  2,   "V",           "A A", false], # 206
    0x13b => [       "SLOPE",  2,  2,   "V",           "A A", false], # 207
    0x13c => [       "TTEST",  4,  4,   "V",       "A A V V", false], # 208
    0x13d => [        "PROB",  3,  4,   "V",       "A A V V", false], # 209
    0x13e => [       "DEVSQ",  1, 30,   "V",         "R ...", false], # 210
    0x13f => [     "GEOMEAN",  1, 30,   "V",         "R ...", false], # 211
    0x140 => [     "HARMEAN",  1, 30,   "V",         "R ...", false], # 212
    0x141 => [       "SUMSQ",  0, 30,   "V",         "R ...", false], # 213
    0x142 => [        "KURT",  1, 30,   "V",         "R ...", false], # 214
    0x143 => [        "SKEW",  1, 30,   "V",         "R ...", false], # 215
    0x144 => [       "ZTEST",  2,  3,   "V",         "R V V", false], # 216
    0x145 => [       "LARGE",  2,  2,   "V",           "R V", false], # 217
    0x146 => [       "SMALL",  2,  2,   "V",           "R V", false], # 218
    0x147 => [    "QUARTILE",  2,  2,   "V",           "R V", false], # 219
    0x148 => [  "PERCENTILE",  2,  2,   "V",           "R V", false], # 220
    0x149 => [ "PERCENTRANK",  2,  3,   "V",         "R V V", false], # 221
    0x14a => [        "MODE",  1, 30,   "V",         "A ...", false], # 222
    0x14b => [    "TRIMMEAN",  2,  2,   "V",           "R V", false], # 223
    0x14c => [        "TINV",  2,  2,   "V",           "V V", false], # 224
    0x150 => [ "CONCATENATE",  0, 30,   "V",         "V ...", false], # 225
    0x151 => [       "POWER",  2,  2,   "V",           "V V", false], # 226
    0x156 => [     "RADIANS",  1,  1,   "V",             "V", false], # 227
    0x157 => [     "DEGREES",  1,  1,   "V",             "V", false], # 228
    0x158 => [    "SUBTOTAL",  2, 30,   "V",       "V R ...", false], # 229
    0x159 => [       "SUMIF",  2,  3,   "V",         "R V R", false], # 230
    0x15a => [     "COUNTIF",  2,  2,   "V",           "R V", false], # 231
    0x15b => [  "COUNTBLANK",  1,  1,   "V",             "R", false], # 232
    0x15e => [       "ISPMT",  4,  4,   "V",       "V V V V", false], # 233
    0x15f => [     "DATEDIF",  3,  3,   "V",         "V V V", false], # 234
    0x160 => [  "DATESTRING",  1,  1,   "V",             "V", false], # 235
    0x161 => ["NUMBERSTRING",  2,  2,   "V",           "V V", false], # 236
    0x162 => [       "ROMAN",  1,  2,   "V",           "V V", false], # 237
    0x166 => ["GETPIVOTDATA",  2, 30,   "A",             "-", false], # 238
    0x167 => [   "HYPERLINK",  1,  2,   "V",           "V V", false], # 239
    0x168 => [    "PHONETIC",  1,  1,   "V",             "R", false], # 240
    0x169 => [    "AVERAGEA",  1, 30,   "V",         "R ...", false], # 241
    0x16a => [        "MAXA",  1, 30,   "V",         "R ...", false], # 242
    0x16b => [        "MINA",  1, 30,   "V",         "R ...", false], # 243
    0x16c => [     "STDEVPA",  1, 30,   "V",         "R ...", false], # 244
    0x16d => [       "VARPA",  1, 30,   "V",         "R ...", false], # 245
    0x16e => [      "STDEVA",  1, 30,   "V",         "R ...", false], # 246
    0x16f => [        "VARA",  1, 30,   "V",         "R ...", false]  # 247
}


# Formulas Parse things

PTGEXP          = 0x01
PTGTBL          = 0x02
PTGADD          = 0x03
PTGSUB          = 0x04
PTGMUL          = 0x05
PTGDIV          = 0x06
PTGPOWER        = 0x07
PTGCONCAT       = 0x08
PTGLT           = 0x09
PTGLE           = 0x0a
PTGEQ           = 0x0b
PTGGE           = 0x0c
PTGGT           = 0x0d
PTGNE           = 0x0e
PTGISECT        = 0x0f
PTGUNION        = 0x10
PTGRANGE        = 0x11
PTGUPLUS        = 0x12
PTGUMINUS       = 0x13
PTGPERCENT      = 0x14
PTGPAREN        = 0x15
PTGMISSARG      = 0x16
PTGSTR          = 0x17
PTGEXTEND       = 0x18
PTGATTR         = 0x19
PTGSHEET        = 0x1a
PTGENDSHEET     = 0x1b
PTGERR          = 0x1c
PTGBOOL         = 0x1d
PTGINT          = 0x1e
PTGNUM          = 0x1f

PTGARRAYR       = 0x20
PTGFUNCR        = 0x21
PTGFUNCVARR     = 0x22
PTGNAMER        = 0x23
PTGREFR         = 0x24
PTGAREAR        = 0x25
PTGMEMAREAR     = 0x26
PTGMEMERRR      = 0x27
PTGMEMNOMEMR    = 0x28
PTGMEMFUNCR     = 0x29
PTGREFERRR      = 0x2a
PTGAREAERRR     = 0x2b
PTGREFNR        = 0x2c
PTGAREANR       = 0x2d
PTGMEMAREANR    = 0x2e
PTGMEMNOMEMNR   = 0x2f
PTGNAMEXR       = 0x39
PTGREF3DR       = 0x3a
PTGAREA3DR      = 0x3b
PTGREFERR3DR    = 0x3c
PTGAREAERR3DR   = 0x3d

PTGARRAYV       = 0x40
PTGFUNCV        = 0x41
PTGFUNCVARV     = 0x42
PTGNAMEV        = 0x43
PTGREFV         = 0x44
PTGAREAV        = 0x45
PTGMEMAREAV     = 0x46
PTGMEMERRV      = 0x47
PTGMEMNOMEMV    = 0x48
PTGMEMFUNCV     = 0x49
PTGREFERRV      = 0x4a
PTGAREAERRV     = 0x4b
PTGREFNV        = 0x4c
PTGAREANV       = 0x4d
PTGMEMAREANV    = 0x4e
PTGMEMNOMEMNV   = 0x4f
PTGFUNCCEV      = 0x58
PTGNAMEXV       = 0x59
PTGREF3DV       = 0x5a
PTGAREA3DV      = 0x5b
PTGREFERR3DV    = 0x5c
PTGAREAERR3DV   = 0x5d

PTGARRAYA       = 0x60
PTGFUNCA        = 0x61
PTGFUNCVARA     = 0x62
PTGNAMEA        = 0x63
PTGREFA         = 0x64
PTGAREAA        = 0x65
PTGMEMAREAA     = 0x66
PTGMEMERRA      = 0x67
PTGMEMNOMEMA    = 0x68
PTGMEMFUNCA     = 0x69
PTGREFERRA      = 0x6a
PTGAREAERRA     = 0x6b
PTGREFNA        = 0x6c
PTGAREANA       = 0x6d
PTGMEMAREANA    = 0x6e
PTGMEMNOMEMNA   = 0x6f
PTGFUNCCEA      = 0x78
PTGNAMEXA       = 0x79
PTGREF3DA       = 0x7a
PTGAREA3DA      = 0x7b
PTGREFERR3DA    = 0x7c
PTGAREAERR3DA   = 0x7d


PTG_NAMES = {
    :ptgExp         => "ptgExp",
    :ptgTbl         => "ptgTbl",
    :ptgAdd         => "ptgAdd",
    :ptgSub         => "ptgSub",
    :ptgMul         => "ptgMul",
    :ptgDiv         => "ptgDiv",
    :ptgPower       => "ptgPower",
    :ptgConcat      => "ptgConcat",
    :ptgLT          => "ptgLT",
    :ptgLE          => "ptgLE",
    :ptgEQ          => "ptgEQ",
    :ptgGE          => "ptgGE",
    :ptgGT          => "ptgGT",
    :ptgNE          => "ptgNE",
    :ptgIsect       => "ptgIsect",
    :ptgUnion       => "ptgUnion",
    :ptgRange       => "ptgRange",
    :ptgUplus       => "ptgUplus",
    :ptgUminus      => "ptgUminus",
    :ptgPercent     => "ptgPercent",
    :ptgParen       => "ptgParen",
    :ptgMissArg     => "ptgMissArg",
    :ptgStr         => "ptgStr",
    :ptgExtend      => "ptgExtend",
    :ptgAttr        => "ptgAttr",
    :ptgSheet       => "ptgSheet",
    :ptgEndSheet    => "ptgEndSheet",
    :ptgErr         => "ptgErr",
    :ptgBool        => "ptgBool",
    :ptgInt         => "ptgInt",
    :ptgNum         => "ptgNum",
    :ptgArrayR      => "ptgArrayR",
    :ptgFuncR       => "ptgFuncR",
    :ptgFuncVarR    => "ptgFuncVarR",
    :ptgNameR       => "ptgNameR",
    :ptgRefR        => "ptgRefR",
    :ptgAreaR       => "ptgAreaR",
    :ptgMemAreaR    => "ptgMemAreaR",
    :ptgMemErrR     => "ptgMemErrR",
    :ptgMemNoMemR   => "ptgMemNoMemR",
    :ptgMemFuncR    => "ptgMemFuncR",
    :ptgRefErrR     => "ptgRefErrR",
    :ptgAreaErrR    => "ptgAreaErrR",
    :ptgRefNR       => "ptgRefNR",
    :ptgAreaNR      => "ptgAreaNR",
    :ptgMemAreaNR   => "ptgMemAreaNR",
    :ptgMemNoMemNR  => "ptgMemNoMemNR",
    :ptgNameXR      => "ptgNameXR",
    :ptgRef3dR      => "ptgRef3dR",
    :ptgArea3dR     => "ptgArea3dR",
    :ptgRefErr3dR   => "ptgRefErr3dR",
    :ptgAreaErr3dR  => "ptgAreaErr3dR",
    :ptgArrayV      => "ptgArrayV",
    :ptgFuncV       => "ptgFuncV",
    :ptgFuncVarV    => "ptgFuncVarV",
    :ptgNameV       => "ptgNameV",
    :ptgRefV        => "ptgRefV",
    :ptgAreaV       => "ptgAreaV",
    :ptgMemAreaV    => "ptgMemAreaV",
    :ptgMemErrV     => "ptgMemErrV",
    :ptgMemNoMemV   => "ptgMemNoMemV",
    :ptgMemFuncV    => "ptgMemFuncV",
    :ptgRefErrV     => "ptgRefErrV",
    :ptgAreaErrV    => "ptgAreaErrV",
    :ptgRefNV       => "ptgRefNV",
    :ptgAreaNV      => "ptgAreaNV",
    :ptgMemAreaNV   => "ptgMemAreaNV",
    :ptgMemNoMemNV  => "ptgMemNoMemNV",
    :ptgFuncCEV     => "ptgFuncCEV",
    :ptgNameXV      => "ptgNameXV",
    :ptgRef3dV      => "ptgRef3dV",
    :ptgArea3dV     => "ptgArea3dV",
    :ptgRefErr3dV   => "ptgRefErr3dV",
    :ptgAreaErr3dV  => "ptgAreaErr3dV",
    :ptgArrayA      => "ptgArrayA",
    :ptgFuncA       => "ptgFuncA",
    :ptgFuncVarA    => "ptgFuncVarA",
    :ptgNameA       => "ptgNameA",
    :ptgRefA        => "ptgRefA",
    :ptgAreaA       => "ptgAreaA",
    :ptgMemAreaA    => "ptgMemAreaA",
    :ptgMemErrA     => "ptgMemErrA",
    :ptgMemNoMemA   => "ptgMemNoMemA",
    :ptgMemFuncA    => "ptgMemFuncA",
    :ptgRefErrA     => "ptgRefErrA",
    :ptgAreaErrA    => "ptgAreaErrA",
    :ptgRefNA       => "ptgRefNA",
    :ptgAreaNA      => "ptgAreaNA",
    :ptgMemAreaNA   => "ptgMemAreaNA",
    :ptgMemNoMemNA  => "ptgMemNoMemNA",
    :ptgFuncCEA     => "ptgFuncCEA",
    :ptgNameXA      => "ptgNameXA",
    :ptgRef3dA      => "ptgRef3dA",
    :ptgArea3dA     => "ptgArea3dA",
    :ptgRefErr3dA   => "ptgRefErr3dA",
    :ptgAreaErr3dA  => "ptgAreaErr3dA"
}


ERROR_MSG_BY_CODE = {
    0x00 => "#NULL!",  # intersection of two cell ranges is empty
    0x07 => "#DIV/0!", # division by zero
    0x0F => "#VALUE!", # wrong type of operand
    0x17 => "#REF!",   # illegal or deleted cell reference
    0x1D => "#NAME?",  # wrong function or range name
    0x24 => "#NUM!",   # value range overflow
    0x2A => "#N/A!"    # argument or function not available
}