#!/usr/bin/env python # -*- coding: windows-1251 -*- # Copyright (C) 2005 Roman V. Kiseliov # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # 3. All advertising materials mentioning features or use of this # software must display the following acknowledgment: # "This product includes software developed by # Roman V. Kiseliov ." # # 4. Redistributions of any form whatsoever must retain the following # acknowledgment: # "This product includes software developed by # Roman V. Kiseliov ." # # THIS SOFTWARE IS PROVIDED BY Roman V. Kiseliov ``AS IS'' AND ANY # EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Roman V. Kiseliov OR # ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED # OF THE POSSIBILITY OF SUCH DAMAGE. __rev_id__ = """$Id: ExcelMagic.py,v 1.2 2005/10/26 07:44:24 rvk Exp $""" """ 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, "R", "V R R", 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 PtgNames = { 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: u"#NULL!", # intersection of two cell ranges is empty 0x07: u"#DIV/0!", # division by zero 0x0F: u"#VALUE!", # wrong type of operand 0x17: u"#REF!", # illegal or deleted cell reference 0x1D: u"#NAME?", # wrong function or range name 0x24: u"#NUM!", # value range overflow 0x2A: u"#N/A!" # argument or function not available }