1# -*- coding: ascii -*- 2""" 3lots of Excel Magic Numbers 4""" 5 6# Boundaries BIFF8+ 7 8MAX_ROW = 65536 9MAX_COL = 256 10 11 12biff_records = { 13 0x0000: "DIMENSIONS", 14 0x0001: "BLANK", 15 0x0002: "INTEGER", 16 0x0003: "NUMBER", 17 0x0004: "LABEL", 18 0x0005: "BOOLERR", 19 0x0006: "FORMULA", 20 0x0007: "STRING", 21 0x0008: "ROW", 22 0x0009: "BOF", 23 0x000A: "EOF", 24 0x000B: "INDEX", 25 0x000C: "CALCCOUNT", 26 0x000D: "CALCMODE", 27 0x000E: "PRECISION", 28 0x000F: "REFMODE", 29 0x0010: "DELTA", 30 0x0011: "ITERATION", 31 0x0012: "PROTECT", 32 0x0013: "PASSWORD", 33 0x0014: "HEADER", 34 0x0015: "FOOTER", 35 0x0016: "EXTERNCOUNT", 36 0x0017: "EXTERNSHEET", 37 0x0018: "NAME", 38 0x0019: "WINDOWPROTECT", 39 0x001A: "VERTICALPAGEBREAKS", 40 0x001B: "HORIZONTALPAGEBREAKS", 41 0x001C: "NOTE", 42 0x001D: "SELECTION", 43 0x001E: "FORMAT", 44 0x001F: "FORMATCOUNT", 45 0x0020: "COLUMNDEFAULT", 46 0x0021: "ARRAY", 47 0x0022: "1904", 48 0x0023: "EXTERNNAME", 49 0x0024: "COLWIDTH", 50 0x0025: "DEFAULTROWHEIGHT", 51 0x0026: "LEFTMARGIN", 52 0x0027: "RIGHTMARGIN", 53 0x0028: "TOPMARGIN", 54 0x0029: "BOTTOMMARGIN", 55 0x002A: "PRINTHEADERS", 56 0x002B: "PRINTGRIDLINES", 57 0x002F: "FILEPASS", 58 0x0031: "FONT", 59 0x0036: "TABLE", 60 0x003C: "CONTINUE", 61 0x003D: "WINDOW1", 62 0x003E: "WINDOW2", 63 0x0040: "BACKUP", 64 0x0041: "PANE", 65 0x0042: "CODEPAGE", 66 0x0043: "XF", 67 0x0044: "IXFE", 68 0x0045: "EFONT", 69 0x004D: "PLS", 70 0x0050: "DCON", 71 0x0051: "DCONREF", 72 0x0053: "DCONNAME", 73 0x0055: "DEFCOLWIDTH", 74 0x0056: "BUILTINFMTCNT", 75 0x0059: "XCT", 76 0x005A: "CRN", 77 0x005B: "FILESHARING", 78 0x005C: "WRITEACCESS", 79 0x005D: "OBJ", 80 0x005E: "UNCALCED", 81 0x005F: "SAFERECALC", 82 0x0060: "TEMPLATE", 83 0x0063: "OBJPROTECT", 84 0x007D: "COLINFO", 85 0x007E: "RK", 86 0x007F: "IMDATA", 87 0x0080: "GUTS", 88 0x0081: "WSBOOL", 89 0x0082: "GRIDSET", 90 0x0083: "HCENTER", 91 0x0084: "VCENTER", 92 0x0085: "BOUNDSHEET", 93 0x0086: "WRITEPROT", 94 0x0087: "ADDIN", 95 0x0088: "EDG", 96 0x0089: "PUB", 97 0x008C: "COUNTRY", 98 0x008D: "HIDEOBJ", 99 0x008E: "BUNDLESOFFSET", 100 0x008F: "BUNDLEHEADER", 101 0x0090: "SORT", 102 0x0091: "SUB", 103 0x0092: "PALETTE", 104 0x0093: "STYLE", 105 0x0094: "LHRECORD", 106 0x0095: "LHNGRAPH", 107 0x0096: "SOUND", 108 0x0098: "LPR", 109 0x0099: "STANDARDWIDTH", 110 0x009A: "FNGROUPNAME", 111 0x009B: "FILTERMODE", 112 0x009C: "FNGROUPCOUNT", 113 0x009D: "AUTOFILTERINFO", 114 0x009E: "AUTOFILTER", 115 0x00A0: "SCL", 116 0x00A1: "SETUP", 117 0x00A9: "COORDLIST", 118 0x00AB: "GCW", 119 0x00AE: "SCENMAN", 120 0x00AF: "SCENARIO", 121 0x00B0: "SXVIEW", 122 0x00B1: "SXVD", 123 0x00B2: "SXVI", 124 0x00B4: "SXIVD", 125 0x00B5: "SXLI", 126 0x00B6: "SXPI", 127 0x00B8: "DOCROUTE", 128 0x00B9: "RECIPNAME", 129 0x00BC: "SHRFMLA", 130 0x00BD: "MULRK", 131 0x00BE: "MULBLANK", 132 0x00C1: "MMS", 133 0x00C2: "ADDMENU", 134 0x00C3: "DELMENU", 135 0x00C5: "SXDI", 136 0x00C6: "SXDB", 137 0x00C7: "SXFIELD", 138 0x00C8: "SXINDEXLIST", 139 0x00C9: "SXDOUBLE", 140 0x00CD: "SXSTRING", 141 0x00CE: "SXDATETIME", 142 0x00D0: "SXTBL", 143 0x00D1: "SXTBRGITEM", 144 0x00D2: "SXTBPG", 145 0x00D3: "OBPROJ", 146 0x00D5: "SXIDSTM", 147 0x00D6: "RSTRING", 148 0x00D7: "DBCELL", 149 0x00DA: "BOOKBOOL", 150 0x00DC: "SXEXT|PARAMQRY", 151 0x00DD: "SCENPROTECT", 152 0x00DE: "OLESIZE", 153 0x00DF: "UDDESC", 154 0x00E0: "XF", 155 0x00E1: "INTERFACEHDR", 156 0x00E2: "INTERFACEEND", 157 0x00E3: "SXVS", 158 0x00E5: "MERGEDCELLS", 159 0x00E9: "BITMAP", 160 0x00EB: "MSODRAWINGGROUP", 161 0x00EC: "MSODRAWING", 162 0x00ED: "MSODRAWINGSELECTION", 163 0x00F0: "SXRULE", 164 0x00F1: "SXEX", 165 0x00F2: "SXFILT", 166 0x00F6: "SXNAME", 167 0x00F7: "SXSELECT", 168 0x00F8: "SXPAIR", 169 0x00F9: "SXFMLA", 170 0x00FB: "SXFORMAT", 171 0x00FC: "SST", 172 0x00FD: "LABELSST", 173 0x00FF: "EXTSST", 174 0x0100: "SXVDEX", 175 0x0103: "SXFORMULA", 176 0x0122: "SXDBEX", 177 0x0137: "CHTRINSERT", 178 0x0138: "CHTRINFO", 179 0x013B: "CHTRCELLCONTENT", 180 0x013D: "TABID", 181 0x0140: "CHTRMOVERANGE", 182 0x014D: "CHTRINSERTTAB", 183 0x015F: "LABELRANGES", 184 0x0160: "USESELFS", 185 0x0161: "DSF", 186 0x0162: "XL5MODIFY", 187 0x0196: "CHTRHEADER", 188 0x01A9: "USERBVIEW", 189 0x01AA: "USERSVIEWBEGIN", 190 0x01AB: "USERSVIEWEND", 191 0x01AD: "QSI", 192 0x01AE: "SUPBOOK", 193 0x01AF: "PROT4REV", 194 0x01B0: "CONDFMT", 195 0x01B1: "CF", 196 0x01B2: "DVAL", 197 0x01B5: "DCONBIN", 198 0x01B6: "TXO", 199 0x01B7: "REFRESHALL", 200 0x01B8: "HLINK", 201 0x01BA: "CODENAME", 202 0x01BB: "SXFDBTYPE", 203 0x01BC: "PROT4REVPASS", 204 0x01BE: "DV", 205 0x01C0: "XL9FILE", 206 0x01C1: "RECALCID", 207 0x0200: "DIMENSIONS", 208 0x0201: "BLANK", 209 0x0203: "NUMBER", 210 0x0204: "LABEL", 211 0x0205: "BOOLERR", 212 0x0206: "FORMULA", 213 0x0207: "STRING", 214 0x0208: "ROW", 215 0x0209: "BOF", 216 0x020B: "INDEX", 217 0x0218: "NAME", 218 0x0221: "ARRAY", 219 0x0223: "EXTERNNAME", 220 0x0225: "DEFAULTROWHEIGHT", 221 0x0231: "FONT", 222 0x0236: "TABLE", 223 0x023E: "WINDOW2", 224 0x0243: "XF", 225 0x027E: "RK", 226 0x0293: "STYLE", 227 0x0406: "FORMULA", 228 0x0409: "BOF", 229 0x041E: "FORMAT", 230 0x0443: "XF", 231 0x04BC: "SHRFMLA", 232 0x0800: "SCREENTIP", 233 0x0803: "WEBQRYSETTINGS", 234 0x0804: "WEBQRYTABLES", 235 0x0809: "BOF", 236 0x0862: "SHEETLAYOUT", 237 0x0867: "SHEETPROTECTION", 238 0x1001: "UNITS", 239 0x1002: "ChartChart", 240 0x1003: "ChartSeries", 241 0x1006: "ChartDataformat", 242 0x1007: "ChartLineformat", 243 0x1009: "ChartMarkerformat", 244 0x100A: "ChartAreaformat", 245 0x100B: "ChartPieformat", 246 0x100C: "ChartAttachedlabel", 247 0x100D: "ChartSeriestext", 248 0x1014: "ChartChartformat", 249 0x1015: "ChartLegend", 250 0x1016: "ChartSerieslist", 251 0x1017: "ChartBar", 252 0x1018: "ChartLine", 253 0x1019: "ChartPie", 254 0x101A: "ChartArea", 255 0x101B: "ChartScatter", 256 0x101C: "ChartChartline", 257 0x101D: "ChartAxis", 258 0x101E: "ChartTick", 259 0x101F: "ChartValuerange", 260 0x1020: "ChartCatserrange", 261 0x1021: "ChartAxislineformat", 262 0x1022: "ChartFormatlink", 263 0x1024: "ChartDefaulttext", 264 0x1025: "ChartText", 265 0x1026: "ChartFontx", 266 0x1027: "ChartObjectLink", 267 0x1032: "ChartFrame", 268 0x1033: "BEGIN", 269 0x1034: "END", 270 0x1035: "ChartPlotarea", 271 0x103A: "Chart3D", 272 0x103C: "ChartPicf", 273 0x103D: "ChartDropbar", 274 0x103E: "ChartRadar", 275 0x103F: "ChartSurface", 276 0x1040: "ChartRadararea", 277 0x1041: "ChartAxisparent", 278 0x1043: "ChartLegendxn", 279 0x1044: "ChartShtprops", 280 0x1045: "ChartSertocrt", 281 0x1046: "ChartAxesused", 282 0x1048: "ChartSbaseref", 283 0x104A: "ChartSerparent", 284 0x104B: "ChartSerauxtrend", 285 0x104E: "ChartIfmt", 286 0x104F: "ChartPos", 287 0x1050: "ChartAlruns", 288 0x1051: "ChartAI", 289 0x105B: "ChartSerauxerrbar", 290 0x105D: "ChartSerfmt", 291 0x105F: "Chart3DDataFormat", 292 0x1060: "ChartFbi", 293 0x1061: "ChartBoppop", 294 0x1062: "ChartAxcext", 295 0x1063: "ChartDat", 296 0x1064: "ChartPlotgrowth", 297 0x1065: "ChartSiindex", 298 0x1066: "ChartGelframe", 299 0x1067: "ChartBoppcustom", 300 0xFFFF: "" 301} 302 303 304all_funcs_by_name = { 305 # Includes Analysis ToolPak aka ATP aka add-in aka xcall functions, 306 # distinguished by -ve opcode. 307 # name: (opcode, min # args, max # args, func return type, func arg types) 308 # + in func arg types means more of the same. 309 'ABS' : ( 24, 1, 1, 'V', 'V'), 310 'ACCRINT' : ( -1, 6, 7, 'V', 'VVVVVVV'), 311 'ACCRINTM' : ( -1, 3, 5, 'V', 'VVVVV'), 312 'ACOS' : ( 99, 1, 1, 'V', 'V'), 313 'ACOSH' : (233, 1, 1, 'V', 'V'), 314 'ADDRESS' : (219, 2, 5, 'V', 'VVVVV'), 315 'AMORDEGRC' : ( -1, 7, 7, 'V', 'VVVVVVV'), 316 'AMORLINC' : ( -1, 7, 7, 'V', 'VVVVVVV'), 317 'AND' : ( 36, 1, 30, 'V', 'D+'), 318 'AREAS' : ( 75, 1, 1, 'V', 'R'), 319 'ASC' : (214, 1, 1, 'V', 'V'), 320 'ASIN' : ( 98, 1, 1, 'V', 'V'), 321 'ASINH' : (232, 1, 1, 'V', 'V'), 322 'ATAN' : ( 18, 1, 1, 'V', 'V'), 323 'ATAN2' : ( 97, 2, 2, 'V', 'VV'), 324 'ATANH' : (234, 1, 1, 'V', 'V'), 325 'AVEDEV' : (269, 1, 30, 'V', 'D+'), 326 'AVERAGE' : ( 5, 1, 30, 'V', 'D+'), 327 'AVERAGEA' : (361, 1, 30, 'V', 'D+'), 328 'BAHTTEXT' : (368, 1, 1, 'V', 'V'), 329 'BESSELI' : ( -1, 2, 2, 'V', 'VV'), 330 'BESSELJ' : ( -1, 2, 2, 'V', 'VV'), 331 'BESSELK' : ( -1, 2, 2, 'V', 'VV'), 332 'BESSELY' : ( -1, 2, 2, 'V', 'VV'), 333 'BETADIST' : (270, 3, 5, 'V', 'VVVVV'), 334 'BETAINV' : (272, 3, 5, 'V', 'VVVVV'), 335 'BIN2DEC' : ( -1, 1, 1, 'V', 'V'), 336 'BIN2HEX' : ( -1, 1, 2, 'V', 'VV'), 337 'BIN2OCT' : ( -1, 1, 2, 'V', 'VV'), 338 'BINOMDIST' : (273, 4, 4, 'V', 'VVVV'), 339 'CEILING' : (288, 2, 2, 'V', 'VV'), 340 'CELL' : (125, 1, 2, 'V', 'VR'), 341 'CHAR' : (111, 1, 1, 'V', 'V'), 342 'CHIDIST' : (274, 2, 2, 'V', 'VV'), 343 'CHIINV' : (275, 2, 2, 'V', 'VV'), 344 'CHITEST' : (306, 2, 2, 'V', 'AA'), 345 'CHOOSE' : (100, 2, 30, 'R', 'VR+'), 346 'CLEAN' : (162, 1, 1, 'V', 'V'), 347 'CODE' : (121, 1, 1, 'V', 'V'), 348 'COLUMN' : ( 9, 0, 1, 'V', 'R'), 349 'COLUMNS' : ( 77, 1, 1, 'V', 'R'), 350 'COMBIN' : (276, 2, 2, 'V', 'VV'), 351 'COMPLEX' : ( -1, 2, 3, 'V', 'VVV'), 352 'CONCATENATE' : (336, 1, 30, 'V', 'V+'), 353 'CONFIDENCE' : (277, 3, 3, 'V', 'VVV'), 354 'CONVERT' : ( -1, 3, 3, 'V', 'VVV'), 355 'CORREL' : (307, 2, 2, 'V', 'AA'), 356 'COS' : ( 16, 1, 1, 'V', 'V'), 357 'COSH' : (230, 1, 1, 'V', 'V'), 358 'COUNT' : ( 0, 1, 30, 'V', 'D+'), 359 'COUNTA' : (169, 1, 30, 'V', 'D+'), 360 'COUNTBLANK' : (347, 1, 1, 'V', 'R'), 361 'COUNTIF' : (346, 2, 2, 'V', 'RV'), 362 'COUPDAYBS' : ( -1, 3, 5, 'V', 'VVVVV'), 363 'COUPDAYS' : ( -1, 3, 5, 'V', 'VVVVV'), 364 'COUPDAYSNC' : ( -1, 3, 5, 'V', 'VVVVV'), 365 'COUPNCD' : ( -1, 3, 5, 'V', 'VVVVV'), 366 'COUPNUM' : ( -1, 3, 5, 'V', 'VVVVV'), 367 'COUPPCD' : ( -1, 3, 5, 'V', 'VVVVV'), 368 'COVAR' : (308, 2, 2, 'V', 'AA'), 369 'CRITBINOM' : (278, 3, 3, 'V', 'VVV'), 370 'CUMIPMT' : ( -1, 6, 6, 'V', 'VVVVVV'), 371 'CUMPRINC' : ( -1, 6, 6, 'V', 'VVVVVV'), 372 'DATE' : ( 65, 3, 3, 'V', 'VVV'), 373 'DATEDIF' : (351, 3, 3, 'V', 'VVV'), 374 'DATEVALUE' : (140, 1, 1, 'V', 'V'), 375 'DAVERAGE' : ( 42, 3, 3, 'V', 'RRR'), 376 'DAY' : ( 67, 1, 1, 'V', 'V'), 377 'DAYS360' : (220, 2, 3, 'V', 'VVV'), 378 'DB' : (247, 4, 5, 'V', 'VVVVV'), 379 'DBCS' : (215, 1, 1, 'V', 'V'), 380 'DCOUNT' : ( 40, 3, 3, 'V', 'RRR'), 381 'DCOUNTA' : (199, 3, 3, 'V', 'RRR'), 382 'DDB' : (144, 4, 5, 'V', 'VVVVV'), 383 'DEC2BIN' : ( -1, 1, 2, 'V', 'VV'), 384 'DEC2HEX' : ( -1, 1, 2, 'V', 'VV'), 385 'DEC2OCT' : ( -1, 1, 2, 'V', 'VV'), 386 'DEGREES' : (343, 1, 1, 'V', 'V'), 387 'DELTA' : ( -1, 1, 2, 'V', 'VV'), 388 'DEVSQ' : (318, 1, 30, 'V', 'D+'), 389 'DGET' : (235, 3, 3, 'V', 'RRR'), 390 'DISC' : ( -1, 4, 5, 'V', 'VVVVV'), 391 'DMAX' : ( 44, 3, 3, 'V', 'RRR'), 392 'DMIN' : ( 43, 3, 3, 'V', 'RRR'), 393 'DOLLAR' : ( 13, 1, 2, 'V', 'VV'), 394 'DOLLARDE' : ( -1, 2, 2, 'V', 'VV'), 395 'DOLLARFR' : ( -1, 2, 2, 'V', 'VV'), 396 'DPRODUCT' : (189, 3, 3, 'V', 'RRR'), 397 'DSTDEV' : ( 45, 3, 3, 'V', 'RRR'), 398 'DSTDEVP' : (195, 3, 3, 'V', 'RRR'), 399 'DSUM' : ( 41, 3, 3, 'V', 'RRR'), 400 'DURATION' : ( -1, 5, 6, 'V', 'VVVVVV'), 401 'DVAR' : ( 47, 3, 3, 'V', 'RRR'), 402 'DVARP' : (196, 3, 3, 'V', 'RRR'), 403 'EDATE' : ( -1, 2, 2, 'V', 'VV'), 404 'EFFECT' : ( -1, 2, 2, 'V', 'VV'), 405 'EOMONTH' : ( -1, 1, 2, 'V', 'VV'), 406 'ERF' : ( -1, 1, 2, 'V', 'VV'), 407 'ERFC' : ( -1, 1, 1, 'V', 'V'), 408 'ERROR.TYPE' : (261, 1, 1, 'V', 'V'), 409 'EVEN' : (279, 1, 1, 'V', 'V'), 410 'EXACT' : (117, 2, 2, 'V', 'VV'), 411 'EXP' : ( 21, 1, 1, 'V', 'V'), 412 'EXPONDIST' : (280, 3, 3, 'V', 'VVV'), 413 'FACT' : (184, 1, 1, 'V', 'V'), 414 'FACTDOUBLE' : ( -1, 1, 1, 'V', 'V'), 415 'FALSE' : ( 35, 0, 0, 'V', '-'), 416 'FDIST' : (281, 3, 3, 'V', 'VVV'), 417 'FIND' : (124, 2, 3, 'V', 'VVV'), 418 'FINDB' : (205, 2, 3, 'V', 'VVV'), 419 'FINV' : (282, 3, 3, 'V', 'VVV'), 420 'FISHER' : (283, 1, 1, 'V', 'V'), 421 'FISHERINV' : (284, 1, 1, 'V', 'V'), 422 'FIXED' : ( 14, 2, 3, 'V', 'VVV'), 423 'FLOOR' : (285, 2, 2, 'V', 'VV'), 424 'FORECAST' : (309, 3, 3, 'V', 'VAA'), 425 'FREQUENCY' : (252, 2, 2, 'A', 'RR'), 426 'FTEST' : (310, 2, 2, 'V', 'AA'), 427 'FV' : ( 57, 3, 5, 'V', 'VVVVV'), 428 'FVSCHEDULE' : ( -1, 2, 2, 'V', 'VA'), 429 'GAMMADIST' : (286, 4, 4, 'V', 'VVVV'), 430 'GAMMAINV' : (287, 3, 3, 'V', 'VVV'), 431 'GAMMALN' : (271, 1, 1, 'V', 'V'), 432 'GCD' : ( -1, 1, 29, 'V', 'V+'), 433 'GEOMEAN' : (319, 1, 30, 'V', 'D+'), 434 'GESTEP' : ( -1, 1, 2, 'V', 'VV'), 435 'GETPIVOTDATA': (358, 2, 30, 'A', 'VAV+'), 436 'GROWTH' : ( 52, 1, 4, 'A', 'RRRV'), 437 'HARMEAN' : (320, 1, 30, 'V', 'D+'), 438 'HEX2BIN' : ( -1, 1, 2, 'V', 'VV'), 439 'HEX2DEC' : ( -1, 1, 1, 'V', 'V'), 440 'HEX2OCT' : ( -1, 1, 2, 'V', 'VV'), 441 'HLOOKUP' : (101, 3, 4, 'V', 'VRRV'), 442 'HOUR' : ( 71, 1, 1, 'V', 'V'), 443 'HYPERLINK' : (359, 1, 2, 'V', 'VV'), 444 'HYPGEOMDIST' : (289, 4, 4, 'V', 'VVVV'), 445 'IF' : ( 1, 2, 3, 'R', 'VRR'), 446 'IMABS' : ( -1, 1, 1, 'V', 'V'), 447 'IMAGINARY' : ( -1, 1, 1, 'V', 'V'), 448 'IMARGUMENT' : ( -1, 1, 1, 'V', 'V'), 449 'IMCONJUGATE' : ( -1, 1, 1, 'V', 'V'), 450 'IMCOS' : ( -1, 1, 1, 'V', 'V'), 451 'IMDIV' : ( -1, 2, 2, 'V', 'VV'), 452 'IMEXP' : ( -1, 1, 1, 'V', 'V'), 453 'IMLN' : ( -1, 1, 1, 'V', 'V'), 454 'IMLOG10' : ( -1, 1, 1, 'V', 'V'), 455 'IMLOG2' : ( -1, 1, 1, 'V', 'V'), 456 'IMPOWER' : ( -1, 2, 2, 'V', 'VV'), 457 'IMPRODUCT' : ( -1, 2, 2, 'V', 'VV'), 458 'IMREAL' : ( -1, 1, 1, 'V', 'V'), 459 'IMSIN' : ( -1, 1, 1, 'V', 'V'), 460 'IMSQRT' : ( -1, 1, 1, 'V', 'V'), 461 'IMSUB' : ( -1, 2, 2, 'V', 'VV'), 462 'IMSUM' : ( -1, 1, 29, 'V', 'V+'), 463 'INDEX' : ( 29, 2, 4, 'R', 'RVVV'), 464 'INDIRECT' : (148, 1, 2, 'R', 'VV'), 465 'INFO' : (244, 1, 1, 'V', 'V'), 466 'INT' : ( 25, 1, 1, 'V', 'V'), 467 'INTERCEPT' : (311, 2, 2, 'V', 'AA'), 468 'INTRATE' : ( -1, 4, 5, 'V', 'VVVVV'), 469 'IPMT' : (167, 4, 6, 'V', 'VVVVVV'), 470 'IRR' : ( 62, 1, 2, 'V', 'RV'), 471 'ISBLANK' : (129, 1, 1, 'V', 'V'), 472 'ISERR' : (126, 1, 1, 'V', 'V'), 473 'ISERROR' : ( 3, 1, 1, 'V', 'V'), 474 'ISEVEN' : ( -1, 1, 1, 'V', 'V'), 475 'ISLOGICAL' : (198, 1, 1, 'V', 'V'), 476 'ISNA' : ( 2, 1, 1, 'V', 'V'), 477 'ISNONTEXT' : (190, 1, 1, 'V', 'V'), 478 'ISNUMBER' : (128, 1, 1, 'V', 'V'), 479 'ISODD' : ( -1, 1, 1, 'V', 'V'), 480 'ISPMT' : (350, 4, 4, 'V', 'VVVV'), 481 'ISREF' : (105, 1, 1, 'V', 'R'), 482 'ISTEXT' : (127, 1, 1, 'V', 'V'), 483 'KURT' : (322, 1, 30, 'V', 'D+'), 484 'LARGE' : (325, 2, 2, 'V', 'RV'), 485 'LCM' : ( -1, 1, 29, 'V', 'V+'), 486 'LEFT' : (115, 1, 2, 'V', 'VV'), 487 'LEFTB' : (208, 1, 2, 'V', 'VV'), 488 'LEN' : ( 32, 1, 1, 'V', 'V'), 489 'LENB' : (211, 1, 1, 'V', 'V'), 490 'LINEST' : ( 49, 1, 4, 'A', 'RRVV'), 491 'LN' : ( 22, 1, 1, 'V', 'V'), 492 'LOG' : (109, 1, 2, 'V', 'VV'), 493 'LOG10' : ( 23, 1, 1, 'V', 'V'), 494 'LOGEST' : ( 51, 1, 4, 'A', 'RRVV'), 495 'LOGINV' : (291, 3, 3, 'V', 'VVV'), 496 'LOGNORMDIST' : (290, 3, 3, 'V', 'VVV'), 497 'LOOKUP' : ( 28, 2, 3, 'V', 'VRR'), 498 'LOWER' : (112, 1, 1, 'V', 'V'), 499 'MATCH' : ( 64, 2, 3, 'V', 'VRR'), 500 'MAX' : ( 7, 1, 30, 'V', 'D+'), 501 'MAXA' : (362, 1, 30, 'V', 'D+'), 502 'MDETERM' : (163, 1, 1, 'V', 'A'), 503 'MDURATION' : ( -1, 5, 6, 'V', 'VVVVVV'), 504 'MEDIAN' : (227, 1, 30, 'V', 'D+'), 505 'MID' : ( 31, 3, 3, 'V', 'VVV'), 506 'MIDB' : (210, 3, 3, 'V', 'VVV'), 507 'MIN' : ( 6, 1, 30, 'V', 'D+'), 508 'MINA' : (363, 1, 30, 'V', 'D+'), 509 'MINUTE' : ( 72, 1, 1, 'V', 'V'), 510 'MINVERSE' : (164, 1, 1, 'A', 'A'), 511 'MIRR' : ( 61, 3, 3, 'V', 'RVV'), 512 'MMULT' : (165, 2, 2, 'A', 'AA'), 513 'MOD' : ( 39, 2, 2, 'V', 'VV'), 514 'MODE' : (330, 1, 30, 'V', 'A+'), ################ weird ################# 515 'MONTH' : ( 68, 1, 1, 'V', 'V'), 516 'MROUND' : ( -1, 2, 2, 'V', 'VV'), 517 'MULTINOMIAL' : ( -1, 1, 29, 'V', 'V+'), 518 'N' : (131, 1, 1, 'V', 'R'), 519 'NA' : ( 10, 0, 0, 'V', '-'), 520 'NEGBINOMDIST': (292, 3, 3, 'V', 'VVV'), 521 'NETWORKDAYS' : ( -1, 2, 3, 'V', 'VVR'), 522 'NOMINAL' : ( -1, 2, 2, 'V', 'VV'), 523 'NORMDIST' : (293, 4, 4, 'V', 'VVVV'), 524 'NORMINV' : (295, 3, 3, 'V', 'VVV'), 525 'NORMSDIST' : (294, 1, 1, 'V', 'V'), 526 'NORMSINV' : (296, 1, 1, 'V', 'V'), 527 'NOT' : ( 38, 1, 1, 'V', 'V'), 528 'NOW' : ( 74, 0, 0, 'V', '-'), 529 'NPER' : ( 58, 3, 5, 'V', 'VVVVV'), 530 'NPV' : ( 11, 2, 30, 'V', 'VD+'), 531 'OCT2BIN' : ( -1, 1, 2, 'V', 'VV'), 532 'OCT2DEC' : ( -1, 1, 1, 'V', 'V'), 533 'OCT2HEX' : ( -1, 1, 2, 'V', 'VV'), 534 'ODD' : (298, 1, 1, 'V', 'V'), 535 'ODDFPRICE' : ( -1, 9, 9, 'V', 'VVVVVVVVV'), 536 'ODDFYIELD' : ( -1, 9, 9, 'V', 'VVVVVVVVV'), 537 'ODDLPRICE' : ( -1, 8, 8, 'V', 'VVVVVVVV'), 538 'ODDLYIELD' : ( -1, 8, 8, 'V', 'VVVVVVVV'), 539 'OFFSET' : ( 78, 3, 5, 'R', 'RVVVV'), 540 'OR' : ( 37, 1, 30, 'V', 'D+'), 541 'PEARSON' : (312, 2, 2, 'V', 'AA'), 542 'PERCENTILE' : (328, 2, 2, 'V', 'RV'), 543 'PERCENTRANK' : (329, 2, 3, 'V', 'RVV'), 544 'PERMUT' : (299, 2, 2, 'V', 'VV'), 545 'PHONETIC' : (360, 1, 1, 'V', 'R'), 546 'PI' : ( 19, 0, 0, 'V', '-'), 547 'PMT' : ( 59, 3, 5, 'V', 'VVVVV'), 548 'POISSON' : (300, 3, 3, 'V', 'VVV'), 549 'POWER' : (337, 2, 2, 'V', 'VV'), 550 'PPMT' : (168, 4, 6, 'V', 'VVVVVV'), 551 'PRICE' : ( -1, 6, 7, 'V', 'VVVVVVV'), 552 'PRICEDISC' : ( -1, 4, 5, 'V', 'VVVVV'), 553 'PRICEMAT' : ( -1, 5, 6, 'V', 'VVVVVV'), 554 'PROB' : (317, 3, 4, 'V', 'AAVV'), 555 'PRODUCT' : (183, 1, 30, 'V', 'D+'), 556 'PROPER' : (114, 1, 1, 'V', 'V'), 557 'PV' : ( 56, 3, 5, 'V', 'VVVVV'), 558 'QUARTILE' : (327, 2, 2, 'V', 'RV'), 559 'QUOTIENT' : ( -1, 2, 2, 'V', 'VV'), 560 'RADIANS' : (342, 1, 1, 'V', 'V'), 561 'RAND' : ( 63, 0, 0, 'V', '-'), 562 'RANDBETWEEN' : ( -1, 2, 2, 'V', 'VV'), 563 'RANK' : (216, 2, 3, 'V', 'VRV'), 564 'RATE' : ( 60, 3, 6, 'V', 'VVVVVV'), 565 'RECEIVED' : ( -1, 4, 5, 'V', 'VVVVV'), 566 'REPLACE' : (119, 4, 4, 'V', 'VVVV'), 567 'REPLACEB' : (207, 4, 4, 'V', 'VVVV'), 568 'REPT' : ( 30, 2, 2, 'V', 'VV'), 569 'RIGHT' : (116, 1, 2, 'V', 'VV'), 570 'RIGHTB' : (209, 1, 2, 'V', 'VV'), 571 'ROMAN' : (354, 1, 2, 'V', 'VV'), 572 'ROUND' : ( 27, 2, 2, 'V', 'VV'), 573 'ROUNDDOWN' : (213, 2, 2, 'V', 'VV'), 574 'ROUNDUP' : (212, 2, 2, 'V', 'VV'), 575 'ROW' : ( 8, 0, 1, 'V', 'R'), 576 'ROWS' : ( 76, 1, 1, 'V', 'R'), 577 'RSQ' : (313, 2, 2, 'V', 'AA'), 578 'RTD' : (379, 3, 30, 'A', 'VVV+'), 579 'SEARCH' : ( 82, 2, 3, 'V', 'VVV'), 580 'SEARCHB' : (206, 2, 3, 'V', 'VVV'), 581 'SECOND' : ( 73, 1, 1, 'V', 'V'), 582 'SERIESSUM' : ( -1, 4, 4, 'V', 'VVVA'), 583 'SIGN' : ( 26, 1, 1, 'V', 'V'), 584 'SIN' : ( 15, 1, 1, 'V', 'V'), 585 'SINH' : (229, 1, 1, 'V', 'V'), 586 'SKEW' : (323, 1, 30, 'V', 'D+'), 587 'SLN' : (142, 3, 3, 'V', 'VVV'), 588 'SLOPE' : (315, 2, 2, 'V', 'AA'), 589 'SMALL' : (326, 2, 2, 'V', 'RV'), 590 'SQRT' : ( 20, 1, 1, 'V', 'V'), 591 'SQRTPI' : ( -1, 1, 1, 'V', 'V'), 592 'STANDARDIZE' : (297, 3, 3, 'V', 'VVV'), 593 'STDEV' : ( 12, 1, 30, 'V', 'D+'), 594 'STDEVA' : (366, 1, 30, 'V', 'D+'), 595 'STDEVP' : (193, 1, 30, 'V', 'D+'), 596 'STDEVPA' : (364, 1, 30, 'V', 'D+'), 597 'STEYX' : (314, 2, 2, 'V', 'AA'), 598 'SUBSTITUTE' : (120, 3, 4, 'V', 'VVVV'), 599 'SUBTOTAL' : (344, 2, 30, 'V', 'VR+'), 600 'SUM' : ( 4, 1, 30, 'V', 'D+'), 601 'SUMIF' : (345, 2, 3, 'V', 'RVR'), 602 'SUMPRODUCT' : (228, 1, 30, 'V', 'A+'), 603 'SUMSQ' : (321, 1, 30, 'V', 'D+'), 604 'SUMX2MY2' : (304, 2, 2, 'V', 'AA'), 605 'SUMX2PY2' : (305, 2, 2, 'V', 'AA'), 606 'SUMXMY2' : (303, 2, 2, 'V', 'AA'), 607 'SYD' : (143, 4, 4, 'V', 'VVVV'), 608 'T' : (130, 1, 1, 'V', 'R'), 609 'TAN' : ( 17, 1, 1, 'V', 'V'), 610 'TANH' : (231, 1, 1, 'V', 'V'), 611 'TBILLEQ' : ( -1, 3, 3, 'V', 'VVV'), 612 'TBILLPRICE' : ( -1, 3, 3, 'V', 'VVV'), 613 'TBILLYIELD' : ( -1, 3, 3, 'V', 'VVV'), 614 'TDIST' : (301, 3, 3, 'V', 'VVV'), 615 'TEXT' : ( 48, 2, 2, 'V', 'VV'), 616 'TIME' : ( 66, 3, 3, 'V', 'VVV'), 617 'TIMEVALUE' : (141, 1, 1, 'V', 'V'), 618 'TINV' : (332, 2, 2, 'V', 'VV'), 619 'TODAY' : (221, 0, 0, 'V', '-'), 620 'TRANSPOSE' : ( 83, 1, 1, 'A', 'A'), 621 'TREND' : ( 50, 1, 4, 'A', 'RRRV'), 622 'TRIM' : (118, 1, 1, 'V', 'V'), 623 'TRIMMEAN' : (331, 2, 2, 'V', 'RV'), 624 'TRUE' : ( 34, 0, 0, 'V', '-'), 625 'TRUNC' : (197, 1, 2, 'V', 'VV'), 626 'TTEST' : (316, 4, 4, 'V', 'AAVV'), 627 'TYPE' : ( 86, 1, 1, 'V', 'V'), 628 'UPPER' : (113, 1, 1, 'V', 'V'), 629 'USDOLLAR' : (204, 1, 2, 'V', 'VV'), 630 'VALUE' : ( 33, 1, 1, 'V', 'V'), 631 'VAR' : ( 46, 1, 30, 'V', 'D+'), 632 'VARA' : (367, 1, 30, 'V', 'D+'), 633 'VARP' : (194, 1, 30, 'V', 'D+'), 634 'VARPA' : (365, 1, 30, 'V', 'D+'), 635 'VDB' : (222, 5, 7, 'V', 'VVVVVVV'), 636 'VLOOKUP' : (102, 3, 4, 'V', 'VRRV'), 637 'WEEKDAY' : ( 70, 1, 2, 'V', 'VV'), 638 'WEEKNUM' : ( -1, 1, 2, 'V', 'VV'), 639 'WEIBULL' : (302, 4, 4, 'V', 'VVVV'), 640 'WORKDAY' : ( -1, 2, 3, 'V', 'VVR'), 641 'XIRR' : ( -1, 2, 3, 'V', 'AAV'), 642 'XNPV' : ( -1, 3, 3, 'V', 'VAA'), 643 'YEAR' : ( 69, 1, 1, 'V', 'V'), 644 'YEARFRAC' : ( -1, 2, 3, 'V', 'VVV'), 645 'YIELD' : ( -1, 6, 7, 'V', 'VVVVVVV'), 646 'YIELDDISC' : ( -1, 4, 5, 'V', 'VVVVV'), 647 'YIELDMAT' : ( -1, 5, 6, 'V', 'VVVVVV'), 648 'ZTEST' : (324, 2, 3, 'V', 'RVV'), 649 } 650 651# Formulas Parse things 652 653ptgExp = 0x01 654ptgTbl = 0x02 655ptgAdd = 0x03 656ptgSub = 0x04 657ptgMul = 0x05 658ptgDiv = 0x06 659ptgPower = 0x07 660ptgConcat = 0x08 661ptgLT = 0x09 662ptgLE = 0x0a 663ptgEQ = 0x0b 664ptgGE = 0x0c 665ptgGT = 0x0d 666ptgNE = 0x0e 667ptgIsect = 0x0f 668ptgUnion = 0x10 669ptgRange = 0x11 670ptgUplus = 0x12 671ptgUminus = 0x13 672ptgPercent = 0x14 673ptgParen = 0x15 674ptgMissArg = 0x16 675ptgStr = 0x17 676ptgExtend = 0x18 677ptgAttr = 0x19 678ptgSheet = 0x1a 679ptgEndSheet = 0x1b 680ptgErr = 0x1c 681ptgBool = 0x1d 682ptgInt = 0x1e 683ptgNum = 0x1f 684 685ptgArrayR = 0x20 686ptgFuncR = 0x21 687ptgFuncVarR = 0x22 688ptgNameR = 0x23 689ptgRefR = 0x24 690ptgAreaR = 0x25 691ptgMemAreaR = 0x26 692ptgMemErrR = 0x27 693ptgMemNoMemR = 0x28 694ptgMemFuncR = 0x29 695ptgRefErrR = 0x2a 696ptgAreaErrR = 0x2b 697ptgRefNR = 0x2c 698ptgAreaNR = 0x2d 699ptgMemAreaNR = 0x2e 700ptgMemNoMemNR = 0x2f 701ptgNameXR = 0x39 702ptgRef3dR = 0x3a 703ptgArea3dR = 0x3b 704ptgRefErr3dR = 0x3c 705ptgAreaErr3dR = 0x3d 706 707ptgArrayV = 0x40 708ptgFuncV = 0x41 709ptgFuncVarV = 0x42 710ptgNameV = 0x43 711ptgRefV = 0x44 712ptgAreaV = 0x45 713ptgMemAreaV = 0x46 714ptgMemErrV = 0x47 715ptgMemNoMemV = 0x48 716ptgMemFuncV = 0x49 717ptgRefErrV = 0x4a 718ptgAreaErrV = 0x4b 719ptgRefNV = 0x4c 720ptgAreaNV = 0x4d 721ptgMemAreaNV = 0x4e 722ptgMemNoMemNV = 0x4f 723ptgFuncCEV = 0x58 724ptgNameXV = 0x59 725ptgRef3dV = 0x5a 726ptgArea3dV = 0x5b 727ptgRefErr3dV = 0x5c 728ptgAreaErr3dV = 0x5d 729 730ptgArrayA = 0x60 731ptgFuncA = 0x61 732ptgFuncVarA = 0x62 733ptgNameA = 0x63 734ptgRefA = 0x64 735ptgAreaA = 0x65 736ptgMemAreaA = 0x66 737ptgMemErrA = 0x67 738ptgMemNoMemA = 0x68 739ptgMemFuncA = 0x69 740ptgRefErrA = 0x6a 741ptgAreaErrA = 0x6b 742ptgRefNA = 0x6c 743ptgAreaNA = 0x6d 744ptgMemAreaNA = 0x6e 745ptgMemNoMemNA = 0x6f 746ptgFuncCEA = 0x78 747ptgNameXA = 0x79 748ptgRef3dA = 0x7a 749ptgArea3dA = 0x7b 750ptgRefErr3dA = 0x7c 751ptgAreaErr3dA = 0x7d 752 753 754PtgNames = { 755 ptgExp : "ptgExp", 756 ptgTbl : "ptgTbl", 757 ptgAdd : "ptgAdd", 758 ptgSub : "ptgSub", 759 ptgMul : "ptgMul", 760 ptgDiv : "ptgDiv", 761 ptgPower : "ptgPower", 762 ptgConcat : "ptgConcat", 763 ptgLT : "ptgLT", 764 ptgLE : "ptgLE", 765 ptgEQ : "ptgEQ", 766 ptgGE : "ptgGE", 767 ptgGT : "ptgGT", 768 ptgNE : "ptgNE", 769 ptgIsect : "ptgIsect", 770 ptgUnion : "ptgUnion", 771 ptgRange : "ptgRange", 772 ptgUplus : "ptgUplus", 773 ptgUminus : "ptgUminus", 774 ptgPercent : "ptgPercent", 775 ptgParen : "ptgParen", 776 ptgMissArg : "ptgMissArg", 777 ptgStr : "ptgStr", 778 ptgExtend : "ptgExtend", 779 ptgAttr : "ptgAttr", 780 ptgSheet : "ptgSheet", 781 ptgEndSheet : "ptgEndSheet", 782 ptgErr : "ptgErr", 783 ptgBool : "ptgBool", 784 ptgInt : "ptgInt", 785 ptgNum : "ptgNum", 786 ptgArrayR : "ptgArrayR", 787 ptgFuncR : "ptgFuncR", 788 ptgFuncVarR : "ptgFuncVarR", 789 ptgNameR : "ptgNameR", 790 ptgRefR : "ptgRefR", 791 ptgAreaR : "ptgAreaR", 792 ptgMemAreaR : "ptgMemAreaR", 793 ptgMemErrR : "ptgMemErrR", 794 ptgMemNoMemR : "ptgMemNoMemR", 795 ptgMemFuncR : "ptgMemFuncR", 796 ptgRefErrR : "ptgRefErrR", 797 ptgAreaErrR : "ptgAreaErrR", 798 ptgRefNR : "ptgRefNR", 799 ptgAreaNR : "ptgAreaNR", 800 ptgMemAreaNR : "ptgMemAreaNR", 801 ptgMemNoMemNR : "ptgMemNoMemNR", 802 ptgNameXR : "ptgNameXR", 803 ptgRef3dR : "ptgRef3dR", 804 ptgArea3dR : "ptgArea3dR", 805 ptgRefErr3dR : "ptgRefErr3dR", 806 ptgAreaErr3dR : "ptgAreaErr3dR", 807 ptgArrayV : "ptgArrayV", 808 ptgFuncV : "ptgFuncV", 809 ptgFuncVarV : "ptgFuncVarV", 810 ptgNameV : "ptgNameV", 811 ptgRefV : "ptgRefV", 812 ptgAreaV : "ptgAreaV", 813 ptgMemAreaV : "ptgMemAreaV", 814 ptgMemErrV : "ptgMemErrV", 815 ptgMemNoMemV : "ptgMemNoMemV", 816 ptgMemFuncV : "ptgMemFuncV", 817 ptgRefErrV : "ptgRefErrV", 818 ptgAreaErrV : "ptgAreaErrV", 819 ptgRefNV : "ptgRefNV", 820 ptgAreaNV : "ptgAreaNV", 821 ptgMemAreaNV : "ptgMemAreaNV", 822 ptgMemNoMemNV : "ptgMemNoMemNV", 823 ptgFuncCEV : "ptgFuncCEV", 824 ptgNameXV : "ptgNameXV", 825 ptgRef3dV : "ptgRef3dV", 826 ptgArea3dV : "ptgArea3dV", 827 ptgRefErr3dV : "ptgRefErr3dV", 828 ptgAreaErr3dV : "ptgAreaErr3dV", 829 ptgArrayA : "ptgArrayA", 830 ptgFuncA : "ptgFuncA", 831 ptgFuncVarA : "ptgFuncVarA", 832 ptgNameA : "ptgNameA", 833 ptgRefA : "ptgRefA", 834 ptgAreaA : "ptgAreaA", 835 ptgMemAreaA : "ptgMemAreaA", 836 ptgMemErrA : "ptgMemErrA", 837 ptgMemNoMemA : "ptgMemNoMemA", 838 ptgMemFuncA : "ptgMemFuncA", 839 ptgRefErrA : "ptgRefErrA", 840 ptgAreaErrA : "ptgAreaErrA", 841 ptgRefNA : "ptgRefNA", 842 ptgAreaNA : "ptgAreaNA", 843 ptgMemAreaNA : "ptgMemAreaNA", 844 ptgMemNoMemNA : "ptgMemNoMemNA", 845 ptgFuncCEA : "ptgFuncCEA", 846 ptgNameXA : "ptgNameXA", 847 ptgRef3dA : "ptgRef3dA", 848 ptgArea3dA : "ptgArea3dA", 849 ptgRefErr3dA : "ptgRefErr3dA", 850 ptgAreaErr3dA : "ptgAreaErr3dA" 851} 852 853 854error_msg_by_code = { 855 0x00: u"#NULL!", # intersection of two cell ranges is empty 856 0x07: u"#DIV/0!", # division by zero 857 0x0F: u"#VALUE!", # wrong type of operand 858 0x17: u"#REF!", # illegal or deleted cell reference 859 0x1D: u"#NAME?", # wrong function or range name 860 0x24: u"#NUM!", # value range overflow 861 0x2A: u"#N/A" # argument or function not available 862} 863