Skip to main content

xlsbye_formula/
ftab.rs

1pub const FTAB_LEN: usize = 485;
2
3pub const FTAB: [&str; FTAB_LEN] = [
4    "COUNT",
5    "IF",
6    "ISNA",
7    "ISERROR",
8    "SUM",
9    "AVERAGE",
10    "MIN",
11    "MAX",
12    "ROW",
13    "COLUMN",
14    "NA",
15    "NPV",
16    "STDEV",
17    "DOLLAR",
18    "FIXED",
19    "SIN",
20    "COS",
21    "TAN",
22    "ATAN",
23    "PI",
24    "SQRT",
25    "EXP",
26    "LN",
27    "LOG10",
28    "ABS",
29    "INT",
30    "SIGN",
31    "ROUND",
32    "LOOKUP",
33    "INDEX",
34    "REPT",
35    "MID",
36    "LEN",
37    "VALUE",
38    "TRUE",
39    "FALSE",
40    "AND",
41    "OR",
42    "NOT",
43    "MOD",
44    "DCOUNT",
45    "DSUM",
46    "DAVERAGE",
47    "DMIN",
48    "DMAX",
49    "DSTDEV",
50    "VAR",
51    "DVAR",
52    "TEXT",
53    "LINEST",
54    "TREND",
55    "LOGEST",
56    "GROWTH",
57    "GOTO",
58    "HALT",
59    "RETURN",
60    "PV",
61    "FV",
62    "NPER",
63    "PMT",
64    "RATE",
65    "MIRR",
66    "IRR",
67    "RAND",
68    "MATCH",
69    "DATE",
70    "TIME",
71    "DAY",
72    "MONTH",
73    "YEAR",
74    "WEEKDAY",
75    "HOUR",
76    "MINUTE",
77    "SECOND",
78    "NOW",
79    "AREAS",
80    "ROWS",
81    "COLUMNS",
82    "OFFSET",
83    "ABSREF",
84    "RELREF",
85    "ARGUMENT",
86    "SEARCH",
87    "TRANSPOSE",
88    "ERROR",
89    "STEP",
90    "TYPE",
91    "ECHO",
92    "SET.NAME",
93    "CALLER",
94    "DEREF",
95    "WINDOWS",
96    "SERIES",
97    "DOCUMENTS",
98    "ACTIVE.CELL",
99    "SELECTION",
100    "RESULT",
101    "ATAN2",
102    "ASIN",
103    "ACOS",
104    "CHOOSE",
105    "HLOOKUP",
106    "VLOOKUP",
107    "LINKS",
108    "INPUT",
109    "ISREF",
110    "GET.FORMULA",
111    "GET.NAME",
112    "SET.VALUE",
113    "LOG",
114    "EXEC",
115    "CHAR",
116    "LOWER",
117    "UPPER",
118    "PROPER",
119    "LEFT",
120    "RIGHT",
121    "EXACT",
122    "TRIM",
123    "REPLACE",
124    "SUBSTITUTE",
125    "CODE",
126    "NAMES",
127    "DIRECTORY",
128    "FIND",
129    "CELL",
130    "ISERR",
131    "ISTEXT",
132    "ISNUMBER",
133    "ISBLANK",
134    "T",
135    "N",
136    "FOPEN",
137    "FCLOSE",
138    "FSIZE",
139    "FREADLN",
140    "FREAD",
141    "FWRITELN",
142    "FWRITE",
143    "FPOS",
144    "DATEVALUE",
145    "TIMEVALUE",
146    "SLN",
147    "SYD",
148    "DDB",
149    "GET.DEF",
150    "REFTEXT",
151    "TEXTREF",
152    "INDIRECT",
153    "REGISTER",
154    "CALL",
155    "ADD.BAR",
156    "ADD.MENU",
157    "ADD.COMMAND",
158    "ENABLE.COMMAND",
159    "CHECK.COMMAND",
160    "RENAME.COMMAND",
161    "SHOW.BAR",
162    "DELETE.MENU",
163    "DELETE.COMMAND",
164    "GET.CHART.ITEM",
165    "DIALOG.BOX",
166    "CLEAN",
167    "MDETERM",
168    "MINVERSE",
169    "MMULT",
170    "FILES",
171    "IPMT",
172    "PPMT",
173    "COUNTA",
174    "CANCEL.KEY",
175    "FOR",
176    "WHILE",
177    "BREAK",
178    "NEXT",
179    "INITIATE",
180    "REQUEST",
181    "POKE",
182    "EXECUTE",
183    "TERMINATE",
184    "RESTART",
185    "HELP",
186    "GET.BAR",
187    "PRODUCT",
188    "FACT",
189    "GET.CELL",
190    "GET.WORKSPACE",
191    "GET.WINDOW",
192    "GET.DOCUMENT",
193    "DPRODUCT",
194    "ISNONTEXT",
195    "GET.NOTE",
196    "NOTE",
197    "STDEVP",
198    "VARP",
199    "DSTDEVP",
200    "DVARP",
201    "TRUNC",
202    "ISLOGICAL",
203    "DCOUNTA",
204    "DELETE.BAR",
205    "UNREGISTER",
206    "",
207    "",
208    "USDOLLAR",
209    "FINDB",
210    "SEARCHB",
211    "REPLACEB",
212    "LEFTB",
213    "RIGHTB",
214    "MIDB",
215    "LENB",
216    "ROUNDUP",
217    "ROUNDDOWN",
218    "ASC",
219    "DBCS",
220    "RANK",
221    "",
222    "",
223    "ADDRESS",
224    "DAYS360",
225    "TODAY",
226    "VDB",
227    "ELSE",
228    "ELSE.IF",
229    "END.IF",
230    "FOR.CELL",
231    "MEDIAN",
232    "SUMPRODUCT",
233    "SINH",
234    "COSH",
235    "TANH",
236    "ASINH",
237    "ACOSH",
238    "ATANH",
239    "DGET",
240    "CREATE.OBJECT",
241    "VOLATILE",
242    "LAST.ERROR",
243    "CUSTOM.UNDO",
244    "CUSTOM.REPEAT",
245    "FORMULA.CONVERT",
246    "GET.LINK.INFO",
247    "TEXT.BOX",
248    "INFO",
249    "GROUP",
250    "GET.OBJECT",
251    "DB",
252    "PAUSE",
253    "",
254    "",
255    "RESUME",
256    "FREQUENCY",
257    "ADD.TOOLBAR",
258    "DELETE.TOOLBAR",
259    "User",
260    "RESET.TOOLBAR",
261    "EVALUATE",
262    "GET.TOOLBAR",
263    "GET.TOOL",
264    "SPELLING.CHECK",
265    "ERROR.TYPE",
266    "APP.TITLE",
267    "WINDOW.TITLE",
268    "SAVE.TOOLBAR",
269    "ENABLE.TOOL",
270    "PRESS.TOOL",
271    "REGISTER.ID",
272    "GET.WORKBOOK",
273    "AVEDEV",
274    "BETADIST",
275    "GAMMALN",
276    "BETAINV",
277    "BINOMDIST",
278    "CHIDIST",
279    "CHIINV",
280    "COMBIN",
281    "CONFIDENCE",
282    "CRITBINOM",
283    "EVEN",
284    "EXPONDIST",
285    "FDIST",
286    "FINV",
287    "FISHER",
288    "FISHERINV",
289    "FLOOR",
290    "GAMMADIST",
291    "GAMMAINV",
292    "CEILING",
293    "HYPGEOMDIST",
294    "LOGNORMDIST",
295    "LOGINV",
296    "NEGBINOMDIST",
297    "NORMDIST",
298    "NORMSDIST",
299    "NORMINV",
300    "NORMSINV",
301    "STANDARDIZE",
302    "ODD",
303    "PERMUT",
304    "POISSON",
305    "TDIST",
306    "WEIBULL",
307    "SUMXMY2",
308    "SUMX2MY2",
309    "SUMX2PY2",
310    "CHITEST",
311    "CORREL",
312    "COVAR",
313    "FORECAST",
314    "FTEST",
315    "INTERCEPT",
316    "PEARSON",
317    "RSQ",
318    "STEYX",
319    "SLOPE",
320    "TTEST",
321    "PROB",
322    "DEVSQ",
323    "GEOMEAN",
324    "HARMEAN",
325    "SUMSQ",
326    "KURT",
327    "SKEW",
328    "ZTEST",
329    "LARGE",
330    "SMALL",
331    "QUARTILE",
332    "PERCENTILE",
333    "PERCENTRANK",
334    "MODE",
335    "TRIMMEAN",
336    "TINV",
337    "",
338    "MOVIE.COMMAND",
339    "GET.MOVIE",
340    "CONCATENATE",
341    "POWER",
342    "PIVOT.ADD.DATA",
343    "GET.PIVOT.TABLE",
344    "GET.PIVOT.FIELD",
345    "GET.PIVOT.ITEM",
346    "RADIANS",
347    "DEGREES",
348    "SUBTOTAL",
349    "SUMIF",
350    "COUNTIF",
351    "COUNTBLANK",
352    "SCENARIO.GET",
353    "OPTIONS.LISTS.GET",
354    "ISPMT",
355    "DATEDIF",
356    "DATESTRING",
357    "NUMBERSTRING",
358    "ROMAN",
359    "OPEN.DIALOG",
360    "SAVE.DIALOG",
361    "VIEW.GET",
362    "GETPIVOTDATA",
363    "HYPERLINK",
364    "PHONETIC",
365    "AVERAGEA",
366    "MAXA",
367    "MINA",
368    "STDEVPA",
369    "VARPA",
370    "STDEVA",
371    "VARA",
372    "BAHTTEXT",
373    "THAIDAYOFWEEK",
374    "THAIDIGIT",
375    "THAIMONTHOFYEAR",
376    "THAINUMSOUND",
377    "THAINUMSTRING",
378    "THAISTRINGLENGTH",
379    "ISTHAIDIGIT",
380    "ROUNDBAHTDOWN",
381    "ROUNDBAHTUP",
382    "THAIYEAR",
383    "RTD",
384    "CUBEVALUE",
385    "CUBEMEMBER",
386    "CUBEMEMBERPROPERTY",
387    "CUBERANKEDMEMBER",
388    "HEX2BIN",
389    "HEX2DEC",
390    "HEX2OCT",
391    "DEC2BIN",
392    "DEC2HEX",
393    "DEC2OCT",
394    "OCT2BIN",
395    "OCT2HEX",
396    "OCT2DEC",
397    "BIN2DEC",
398    "BIN2OCT",
399    "BIN2HEX",
400    "IMSUB",
401    "IMDIV",
402    "IMPOWER",
403    "IMABS",
404    "IMSQRT",
405    "IMLN",
406    "IMLOG2",
407    "IMLOG10",
408    "IMSIN",
409    "IMCOS",
410    "IMEXP",
411    "IMARGUMENT",
412    "IMCONJUGATE",
413    "IMAGINARY",
414    "IMREAL",
415    "COMPLEX",
416    "IMSUM",
417    "IMPRODUCT",
418    "SERIESSUM",
419    "FACTDOUBLE",
420    "SQRTPI",
421    "QUOTIENT",
422    "DELTA",
423    "GESTEP",
424    "ISEVEN",
425    "ISODD",
426    "MROUND",
427    "ERF",
428    "ERFC",
429    "BESSELJ",
430    "BESSELK",
431    "BESSELY",
432    "BESSELI",
433    "XIRR",
434    "XNPV",
435    "PRICEMAT",
436    "YIELDMAT",
437    "INTRATE",
438    "RECEIVED",
439    "DISC",
440    "PRICEDISC",
441    "YIELDDISC",
442    "TBILLEQ",
443    "TBILLPRICE",
444    "TBILLYIELD",
445    "PRICE",
446    "YIELD",
447    "DOLLARDE",
448    "DOLLARFR",
449    "NOMINAL",
450    "EFFECT",
451    "CUMPRINC",
452    "CUMIPMT",
453    "EDATE",
454    "EOMONTH",
455    "YEARFRAC",
456    "COUPDAYBS",
457    "COUPDAYS",
458    "COUPDAYSNC",
459    "COUPNCD",
460    "COUPNUM",
461    "COUPPCD",
462    "DURATION",
463    "MDURATION",
464    "ODDLPRICE",
465    "ODDLYIELD",
466    "ODDFPRICE",
467    "ODDFYIELD",
468    "RANDBETWEEN",
469    "WEEKNUM",
470    "AMORDEGRC",
471    "AMORLINC",
472    "CONVERT",
473    "ACCRINT",
474    "ACCRINTM",
475    "WORKDAY",
476    "NETWORKDAYS",
477    "GCD",
478    "MULTINOMIAL",
479    "LCM",
480    "FVSCHEDULE",
481    "CUBEKPIMEMBER",
482    "CUBESET",
483    "CUBESETCOUNT",
484    "IFERROR",
485    "COUNTIFS",
486    "SUMIFS",
487    "AVERAGEIF",
488    "AVERAGEIFS",
489];
490
491pub const FTAB_ARGC: [u8; FTAB_LEN] = [
492    255, 3, 1, 1, 255, 255, 255, 255, 1, 1, 0, 254, 255, 2, 3, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
493    1, 1, 2, 3, 4, 2, 3, 1, 1, 0, 0, 255, 255, 1, 2, 3, 3, 3, 3, 3, 3, 255, 3, 2, 4, 4, 4, 4,
494    1, 1, 1, 5, 5, 5, 5, 6, 3, 2, 0, 3, 3, 3, 1, 1, 1, 2, 1, 1, 1, 0, 1, 1, 1, 5, 2, 2, 3, 3,
495    1, 2, 0, 1, 1, 2, 0, 1, 2, 2, 2, 0, 0, 1, 2, 1, 1, 255, 4, 4, 2, 7, 1, 1, 2, 2, 2, 4, 1,
496    1, 1, 1, 2, 2, 2, 1, 4, 4, 1, 3, 1, 3, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1,
497    3, 4, 5, 3, 2, 2, 2, 255, 255, 1, 4, 5, 5, 5, 5, 1, 3, 4, 3, 1, 1, 1, 1, 1, 2, 6, 6, 255,
498    2, 4, 1, 0, 0, 2, 2, 3, 2, 1, 1, 1, 4, 255, 1, 2, 1, 2, 2, 3, 1, 3, 4, 255, 255, 3, 3, 2,
499    1, 3, 1, 1, 0, 0, 2, 3, 3, 4, 2, 2, 3, 3, 2, 2, 1, 1, 3, 0, 0, 5, 3, 0, 7, 0, 1, 0, 3,
500    255, 255, 1, 1, 1, 1, 1, 1, 3, 11, 1, 0, 2, 3, 5, 4, 4, 1, 0, 5, 5, 1, 0, 0, 1, 2, 2, 1,
501    255, 1, 1, 2, 3, 3, 1, 1, 1, 2, 3, 3, 3, 2, 255, 5, 1, 5, 4, 2, 2, 2, 3, 3, 1, 3, 3, 3, 1,
502    1, 2, 4, 3, 2, 4, 3, 3, 3, 4, 1, 3, 1, 3, 1, 2, 3, 3, 4, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
503    2, 2, 4, 4, 255, 255, 255, 255, 255, 255, 3, 2, 2, 2, 2, 3, 255, 2, 2, 4, 4, 3, 255, 2, 9,
504    2, 3, 4, 1, 1, 255, 3, 2, 1, 2, 1, 4, 3, 1, 2, 2, 4, 5, 2, 128, 2, 1, 255, 255, 255, 255,
505    255, 255, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 255, 3, 3, 4, 2, 1, 2, 2, 2, 2, 2, 2,
506    1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 255, 255, 4, 1, 1, 2, 2, 2, 1,
507    1, 2, 2, 1, 2, 2, 2, 2, 3, 3, 6, 6, 5, 5, 5, 5, 5, 3, 3, 3, 7, 7, 2, 2, 2, 2, 6, 6, 2, 2,
508    3, 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 8, 8, 2, 2, 7, 7, 8, 8, 5, 3, 3, 255, 255, 255, 2, 4, 5,
509    1, 2, 128, 129, 3, 129,
510];
511
512pub fn function_name(iftab: u16) -> Option<&'static str> {
513    FTAB.get(usize::from(iftab))
514        .copied()
515        .filter(|name| !name.is_empty())
516}
517
518pub fn function_argc(iftab: u16) -> Option<u8> {
519    FTAB_ARGC.get(usize::from(iftab)).copied()
520}
521
522#[cfg(test)]
523mod tests {
524    use super::*;
525
526    #[test]
527    fn table_has_expected_shape() {
528        assert_eq!(FTAB.len(), FTAB_LEN);
529        assert_eq!(FTAB_ARGC.len(), FTAB_LEN);
530    }
531
532    #[test]
533    fn table_has_key_function_entries() {
534        assert_eq!(function_name(0), Some("COUNT"));
535        assert_eq!(function_name(1), Some("IF"));
536        assert_eq!(function_name(4), Some("SUM"));
537        assert_eq!(function_name(79), Some("ABSREF"));
538        assert_eq!(function_argc(4), Some(255));
539        assert_eq!(function_argc(1), Some(3));
540    }
541}