@@ -43,7 +43,7 @@ It supports:
43
43
* Relative and absolute cell coordinates like ` A1 ` , ` $A1 ` , ` A$1 ` , ` $A$1 ` ;
44
44
* Build-in variables like ` TRUE ` , ` FALSE ` , ` NULL `
45
45
* Custom variables;
46
- * [ TODO ] Custom functions/formulas;
46
+ * Custom functions/formulas;
47
47
* Node and Browser environment.
48
48
49
49
## API (methods)
@@ -90,6 +90,37 @@ parser.setVariable('fooBar', 10);
90
90
parser .getVariable (' fooBar' ); // returns `10`
91
91
```
92
92
93
+ ### .setFunction(name, fn)
94
+
95
+ Set custom function which can be visible while parsing formula expression.
96
+
97
+ ``` js
98
+ parser .setFunction (' ADD_5' , function (params ) {
99
+ return params[0 ] + 5 ;
100
+ });
101
+ parser .setFunction (' GET_LETTER' , function (params ) {
102
+ var string = params[0 ];
103
+ var index = params[1 ] - 1 ;
104
+
105
+ return string .charAt (index);
106
+ });
107
+
108
+ parser .parse (' SUM(4, ADD_5(1))' ); // returns `10`
109
+ parser .parse (' GET_LETTER("Some string", 3)' ); // returns `m`
110
+ ```
111
+
112
+ ### .getFunction(name)
113
+
114
+ Get custom function.
115
+
116
+ ``` js
117
+ parser .setFunction (' ADD_5' , function (params ) {
118
+ return params[0 ] + 5 ;
119
+ });
120
+
121
+ parser .getFunction (' ADD_5' )([1 ]); // returns `6`
122
+ ```
123
+
93
124
### .SUPPORTED_FORMULAS
94
125
95
126
List of all supported formulas function.
@@ -114,6 +145,21 @@ parser.on('callVariable', function(name, done) {
114
145
parser .parse (' SUM(SIN(foo), COS(foo))' ); // returns `1`
115
146
```
116
147
148
+ ### 'callFunction' (name, params, done)
149
+
150
+ Fired while calling function. If function was defined earlier using ` setFunction ` you can overwrite it's result by this hook.
151
+ You can also use this to override result of build-in formulas.
152
+
153
+ ``` js
154
+ parser .on (' callFunction' , function (name , params , done ) {
155
+ if (name === ' ADD_5' ) {
156
+ done (params[0 ] + 5 );
157
+ }
158
+ });
159
+
160
+ parser .parse (' ADD_5(3)' ); // returns `8`
161
+ ```
162
+
117
163
### 'callCellValue' (cellCoord, done)
118
164
119
165
Fired while retrieving cell value by its label (eq: ` B3 ` , ` B$3 ` , ` B$3 ` , ` $B$3 ` ).
0 commit comments