# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Created by (org.apache.poi.hssf.record.formula.function.ExcelFileFormatDocFunctionExtractor)
# from source file 'excelfileformat.odt' (size=356107, md5=0x8f789cb6e75594caf068f8e193004ef4)
#
#Columns: (index, name, minParams, maxParams, returnClass, paramClasses, isVolatile, hasFootnote )

# Built-In Sheet Functions in BIFF2
0	COUNT	0	30	V	R		
1	IF	2	3	R	V R R		
2	ISNA	1	1	V	V		
3	ISERROR	1	1	V	V		
4	SUM	0	30	V	R		
5	AVERAGE	1	30	V	R		
6	MIN	1	30	V	R		
7	MAX	1	30	V	R		
8	ROW	0	1	V	R		
9	COLUMN	0	1	V	R		
10	NA	0	0	V	-		
11	NPV	2	30	V	V R		
12	STDEV	1	30	V	R		
13	DOLLAR	1	2	V	V V		
14	FIXED	2	2	V	V V		x
15	SIN	1	1	V	V		
16	COS	1	1	V	V		
17	TAN	1	1	V	V		
18	ATAN	1	1	V	V		
19	PI	0	0	V	-		
20	SQRT	1	1	V	V		
21	EXP	1	1	V	V		
22	LN	1	1	V	V		
23	LOG10	1	1	V	V		
24	ABS	1	1	V	V		
25	INT	1	1	V	V		
26	SIGN	1	1	V	V		
27	ROUND	2	2	V	V V		
28	LOOKUP	2	3	V	V R R		
29	INDEX	2	4	R	R V V V		
30	REPT	2	2	V	V V		
31	MID	3	3	V	V V V		
32	LEN	1	1	V	V		
33	VALUE	1	1	V	V		
34	TRUE	0	0	V	-		
35	FALSE	0	0	V	-		
36	AND	1	30	V	R		
37	OR	1	30	V	R		
38	NOT	1	1	V	V		
39	MOD	2	2	V	V V		
40	DCOUNT	3	3	V	R R R		
41	DSUM	3	3	V	R R R		
42	DAVERAGE	3	3	V	R R R		
43	DMIN	3	3	V	R R R		
44	DMAX	3	3	V	R R R		
45	DSTDEV	3	3	V	R R R		
46	VAR	1	30	V	R		
47	DVAR	3	3	V	R R R		
48	TEXT	2	2	V	V V		
49	LINEST	1	2	A	R R		x
50	TREND	1	3	A	R R R		x
51	LOGEST	1	2	A	R R		x
52	GROWTH	1	3	A	R R R		x
56	PV	3	5	V	V V V V V		
# Built-In Sheet Functions in BIFF2
57	FV	3	5	V	V V V V V		
58	NPER	3	5	V	V V V V V		
59	PMT	3	5	V	V V V V V		
60	RATE	3	6	V	V V V V V V		
61	MIRR	3	3	V	R V V		
62	IRR	1	2	V	R V		
63	RAND	0	0	V	-	x	
64	MATCH	2	3	V	V R R		
65	DATE	3	3	V	V V V		
66	TIME	3	3	V	V V V		
67	DAY	1	1	V	V		
68	MONTH	1	1	V	V		
69	YEAR	1	1	V	V		
70	WEEKDAY	1	1	V	V		x
71	HOUR	1	1	V	V		
72	MINUTE	1	1	V	V		
73	SECOND	1	1	V	V		
74	NOW	0	0	V	-	x	
75	AREAS	1	1	V	R		
76	ROWS	1	1	V	R		
77	COLUMNS	1	1	V	R		
78	OFFSET	3	5	R	R V V V V	x	
82	SEARCH	2	3	V	V V V		
83	TRANSPOSE	1	1	A	A		
86	TYPE	1	1	V	V		
97	ATAN2	2	2	V	V V		
98	ASIN	1	1	V	V		
99	ACOS	1	1	V	V		
100	CHOOSE	2	30	R	V R		
101	HLOOKUP	3	3	V	V R R		x
102	VLOOKUP	3	3	V	V R R		x
105	ISREF	1	1	V	R		
109	LOG	1	2	V	V V		
111	CHAR	1	1	V	V		
112	LOWER	1	1	V	V		
113	UPPER	1	1	V	V		
114	PROPER	1	1	V	V		
115	LEFT	1	2	V	V V		
116	RIGHT	1	2	V	V V		
117	EXACT	2	2	V	V V		
118	TRIM	1	1	V	V		
119	REPLACE	4	4	V	V V V V		
120	SUBSTITUTE	3	4	V	V V V V		
121	CODE	1	1	V	V		
124	FIND	2	3	V	V V V		
125	CELL	1	2	V	V R	x	
126	ISERR	1	1	V	V		
127	ISTEXT	1	1	V	V		
128	ISNUMBER	1	1	V	V		
129	ISBLANK	1	1	V	V		
130	T	1	1	V	R		
131	N	1	1	V	R		
140	DATEVALUE	1	1	V	V		
141	TIMEVALUE	1	1	V	V		
142	SLN	3	3	V	V V V		
143	SYD	4	4	V	V V V V		
144	DDB	4	5	V	V V V V V		
148	INDIRECT	1	2	R	V V	x	
162	CLEAN	1	1	V	V		
163	MDETERM	1	1	V	A		
164	MINVERSE	1	1	A	A		
165	MMULT	2	2	A	A A		
167	IPMT	4	6	V	V V V V V V		
168	PPMT	4	6	V	V V V V V V		
169	COUNTA	0	30	V	R		
183	PRODUCT	0	30	V	R		
184	FACT	1	1	V	V		
189	DPRODUCT	3	3	V	R R R		
190	ISNONTEXT	1	1	V	V		
193	STDEVP	1	30	V	R		
194	VARP	1	30	V	R		
195	DSTDEVP	3	3	V	R R R		
196	DVARP	3	3	V	R R R		
197	TRUNC	1	1	V	V		x
198	ISLOGICAL	1	1	V	V		
199	DCOUNTA	3	3	V	R R R		
# New Built-In Sheet Functions in BIFF3
49	LINEST	1	4	A	R R V V		x
50	TREND	1	4	A	R R R V		x
51	LOGEST	1	4	A	R R V V		x
52	GROWTH	1	4	A	R R R V		x
197	TRUNC	1	2	V	V V		x
204	YEN	1	2	V	V V		x
205	FINDB	2	3	V	V V V		
206	SEARCHB	2	3	V	V V V		
207	REPLACEB	4	4	V	V V V V		
208	LEFTB	1	2	V	V V		
209	RIGHTB	1	2	V	V V		
210	MIDB	3	3	V	V V V		
211	LENB	1	1	V	V		
212	ROUNDUP	2	2	V	V V		
213	ROUNDDOWN	2	2	V	V V		
214	ASC	1	1	V	V		
215	JIS	1	1	V	V		x
219	ADDRESS	2	5	V	V V V V V		
220	DAYS360	2	2	V	V V		x
221	TODAY	0	0	V	-	x	
222	VDB	5	7	V	V V V V V V V		
227	MEDIAN	1	30	V	R ...		
228	SUMPRODUCT	1	30	V	A ...		
229	SINH	1	1	V	V		
230	COSH	1	1	V	V		
231	TANH	1	1	V	V		
232	ASINH	1	1	V	V		
233	ACOSH	1	1	V	V		
234	ATANH	1	1	V	V		
235	DGET	3	3	V	R R R		
244	INFO	1	1	V	V		
# New Built-In Sheet Functions in BIFF4
14	FIXED	2	3	V	V V V		x
204	USDOLLAR	1	2	V	V V		x
215	DBCS	1	1	V	V		x
216	RANK	2	3	V	V R V		
247	DB	4	5	V	V V V V V		
252	FREQUENCY	2	2	A	R R		
261	ERROR.TYPE	1	1	V	V		
269	AVEDEV	1	30	V	R ...		
270	BETADIST	3	5	V	V V V V V		
271	GAMMALN	1	1	V	V		
272	BETAINV	3	5	V	V V V V V		
273	BINOMDIST	4	4	V	V V V V		
274	CHIDIST	2	2	V	V V		
275	CHIINV	2	2	V	V V		
276	COMBIN	2	2	V	V V		
277	CONFIDENCE	3	3	V	V V V		
278	CRITBINOM	3	3	V	V V V		
279	EVEN	1	1	V	V		
280	EXPONDIST	3	3	V	V V V		
281	FDIST	3	3	V	V V V		
282	FINV	3	3	V	V V V		
283	FISHER	1	1	V	V		
284	FISHERINV	1	1	V	V		
285	FLOOR	2	2	V	V V		
286	GAMMADIST	4	4	V	V V V V		
287	GAMMAINV	3	3	V	V V V		
288	CEILING	2	2	V	V V		
289	HYPGEOMDIST	4	4	V	V V V V		
290	LOGNORMDIST	3	3	V	V V V		
291	LOGINV	3	3	V	V V V		
292	NEGBINOMDIST	3	3	V	V V V		
293	NORMDIST	4	4	V	V V V V		
294	NORMSDIST	1	1	V	V		
295	NORMINV	3	3	V	V V V		
296	NORMSINV	1	1	V	V		
297	STANDARDIZE	3	3	V	V V V		
298	ODD	1	1	V	V		
299	PERMUT	2	2	V	V V		
300	POISSON	3	3	V	V V V		
301	TDIST	3	3	V	V V V		
302	WEIBULL	4	4	V	V V V V		
303	SUMXMY2	2	2	V	A A		
304	SUMX2MY2	2	2	V	A A		
305	SUMX2PY2	2	2	V	A A		
306	CHITEST	2	2	V	A A		
307	CORREL	2	2	V	A A		
308	COVAR	2	2	V	A A		
309	FORECAST	3	3	V	V A A		
310	FTEST	2	2	V	A A		
311	INTERCEPT	2	2	V	A A		
312	PEARSON	2	2	V	A A		
313	RSQ	2	2	V	A A		
314	STEYX	2	2	V	A A		
315	SLOPE	2	2	V	A A		
316	TTEST	4	4	V	A A V V		
317	PROB	3	4	V	A A V V		
318	DEVSQ	1	30	V	R ...		
319	GEOMEAN	1	30	V	R ...		
320	HARMEAN	1	30	V	R ...		
321	SUMSQ	0	30	V	R ...		
322	KURT	1	30	V	R ...		
323	SKEW	1	30	V	R ...		
324	ZTEST	2	3	V	R V V		
325	LARGE	2	2	V	R V		
326	SMALL	2	2	V	R V		
327	QUARTILE	2	2	V	R V		
328	PERCENTILE	2	2	V	R V		
329	PERCENTRANK	2	3	V	R V V		
330	MODE	1	30	V	A		
331	TRIMMEAN	2	2	V	R V		
332	TINV	2	2	V	V V		
# New Built-In Sheet Functions in BIFF5
70	WEEKDAY	1	2	V	V V		x
101	HLOOKUP	3	4	V	V R R V		x
102	VLOOKUP	3	4	V	V R R V		x
220	DAYS360	2	3	V	V V V		x
336	CONCATENATE	0	30	V	V		
337	POWER	2	2	V	V V		
342	RADIANS	1	1	V	V		
343	DEGREES	1	1	V	V		
344	SUBTOTAL	2	30	V	V R		
345	SUMIF	2	3	V	R V R		
346	COUNTIF	2	2	V	R V		
347	COUNTBLANK	1	1	V	R		
350	ISPMT	4	4	V	V V V V		
351	DATEDIF	3	3	V	V V V		
352	DATESTRING	1	1	V	V		
353	NUMBERSTRING	2	2	V	V V		
354	ROMAN	1	2	V	V V		
# New Built-In Sheet Functions in BIFF8
358	GETPIVOTDATA	2	30				
359	HYPERLINK	1	2	V	V V		
360	PHONETIC	1	1	V	R		
361	AVERAGEA	1	30	V	R ...		
362	MAXA	1	30	V	R ...		
363	MINA	1	30	V	R ...		
364	STDEVPA	1	30	V	R ...		
365	VARPA	1	30	V	R ...		
366	STDEVA	1	30	V	R ...		
367	VARA	1	30	V	R ...		
