公式解析器

图书馆提供a Parser 类,用于评价优异的数学公式.
安装
建议安装公式解析器的方法已经通过 国家预防机制 使用下列命令:
$ npm install hot-formula-parser --save
节点.js:
var FormulaParser = require('hot-formula-parser').Parser;
var parser = new FormulaParser();
parser.parse('SUM(1, 6, 7)'); // It returns `Object {error: null, result: 14}`
浏览器 :
<script src="/node_modules/hot-formula-parser/dist/formula-parser.min.js"></script>
<script>
var parser = new formulaParser.Parser();
parser.parse('SUM(1, 6, 7)'); // It returns `Object {error: null, result: 14}`
</script>
特征
它支持:
- 任何数值,负数和正数为浮动或整数;
- 算术操作类
+, (中文(简体) ),-, (中文(简体) ),/, (中文(简体) ),*, (中文(简体) ),%, (中文(简体) ),^· ; - 逻辑操作类
AND(), (中文(简体) ),OR(), (中文(简体) ),NOT(), (中文(简体) ),XOR()· ; - 比较诸如
=, (中文(简体) ),>, (中文(简体) ),>=, (中文(简体) ),<, (中文(简体) ),<=, (中文(简体) ),<>· ; - 所有 JavaScript 数学常数都喜欢
PI(), (中文(简体) ),E(), (中文(简体) ),LN10(), (中文(简体) ),LN2(), (中文(简体) ),LOG10E(), (中文(简体) ),LOG2E(), (中文(简体) ),SQRT1_2(), (中文(简体) ),SQRT2()· ; - 字符串操作像
&(协和eq.parser.parse('-(2&5)');将返回-25(三); - 定义的所有优秀公式 公式.js (简体中文)· ;
- 相对和绝对的单元格坐标
A1, (中文(简体) ),$A1, (中文(简体) ),A$1, (中文(简体) ),$A$1· ; - 内置变量如
TRUE, (中文(简体) ),FALSE, (中文(简体) ),NULL - 自定义变量;
- 自定义函数/公式;
- 节点和浏览器环境.
API( 方法)
var parser = new formulaParser.Parser();
.parse( 表达式)
提供解析和评价表达式。 它总是以 result 财务报告和审定财务报表 error 属性. result 属性
总是保持评价值。 如果发生错误 error 属性将被设定为:
#ERROR!一般错误;#DIV/0!除以零出错;#NAME?未识别函数名称或可变名称;#N/A表示公式没有数值;#NUM!公式遇到无效数字时的情况;#VALUE!当公式参数之一为错误类型时会发生.
parser.parse('(1 + 5 + (5 * 10)) / 10'); // returns `Object {error: null, result: 5.6}`
parser.parse('SUM(MY_VAR)'); // returns `Object {error: "#NAME?", result: null}`
parser.parse('1;;1'); // returns `Object {error: "#ERROR!", result: null}`
.set可变(名称,值)
设定在解析公式表达式时可以可见的预定义可变名称.
parser.setVariable('MY_VARIABLE', 5);
parser.setVariable('fooBar', 10);
parser.parse('(1 + MY_VARIABLE + (5 * fooBar)) / fooBar'); // returns `5.6`
.getVariable(名称)
获取可变名称 .
parser.setVariable('fooBar', 10);
parser.getVariable('fooBar'); // returns `10`
.setFunt 函数(名称, fn)
设置在解析公式表达式时可见的自定义函数.
parser.setFunction('ADD_5', function(params) {
return params[0] + 5;
});
parser.setFunction('GET_LETTER', function(params) {
var string = params[0];
var index = params[1] - 1;
return string.charAt(index);
});
parser.parse('SUM(4, ADD_5(1))'); // returns `10`
parser.parse('GET_LETTER("Some string", 3)'); // returns `m`
功能( 名称)
获取自定义函数 .
parser.setFunction('ADD_5', function(params) {
return params[0] + 5;
});
parser.getFunction('ADD_5')([1]); // returns `6`
. 被推广 福尔摩斯
列出所有支持的公式函数.
require('hot-formula-parser').SUPPORTED_FORMULAS; // An array of formula names
API (呼声)
调用可变( 名称, 已完成)
获取变量时已开火 。 如果前面使用 setVariable 你可以用这个钩子覆盖它.
parser.on('callVariable', function(name, done) {
if (name === 'foo') {
done(Math.PI / 2);
}
});
parser.parse('SUM(SIN(foo), COS(foo))'); // returns `1`
调用功能( 名称、 参数、 完成)
调用函数时已开火 。 如果先前使用 setFunction 你可以覆盖它的结果 通过这个钩.
您也可以使用它来覆盖内建公式的结果 .
parser.on('callFunction', function(name, params, done) {
if (name === 'ADD_5') {
done(params[0] + 5);
}
});
parser.parse('ADD_5(3)'); // returns `8`
呼叫CellValue(CellCoord,已完成)
使用其标签获取单元格值时被解除( eq : B3, (中文(简体) ), B$3, (中文(简体) ), B$3, (中文(简体) ), $B$3) (中文(简体) ).
parser.on('callCellValue', function(cellCoord, done) {
// using label
if (cellCoord.label === 'B$6') {
done('hello');
}
// or using indexes
if (cellCoord.row.index === 5 && cellCoord.row.isAbsolute && cellCoord.column.index === 1 && !cellCoord.column.isAbsolute) {
done('hello');
}
if (cellCoord.label === 'C6') {
done(0.75);
}
});
parser.parse('B$6'); // returns `"hello"`
parser.parse('B$6&" world"'); // returns `"hello world"`
parser.parse('FISHER(C6)'); // returns `0.9729550745276566`
呼叫RangeValue( 启动CellCoord, 端CellCoord, 完成)
获取单元格范围值时已开火( eq : A1:B3, (中文(简体) ), $A1:B$3, (中文(简体) ), A$1:B$3, (中文(简体) ), $A$1:$B$3) (中文(简体) ).
parser.on('callRangeValue', function(startCellCoord, endCellCoord, done) {
var data = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
];
var fragment = [];
for (var row = startCellCoord.row.index; row <= endCellCoord.row.index; row++) {
var rowData = data[row];
var colFragment = [];
for (var col = startCellCoord.column.index; col <= endCellCoord.column.index; col++) {
colFragment.push(rowData[col]);
}
fragment.push(colFragment);
}
if (fragment) {
done(fragment);
}
});
parser.parse('JOIN(A1:E2)'); // returns `"1,2,3,4,5,6,7,8,9,10"`
parser.parse('COLUMNS(A1:E2)'); // returns `5`
parser.parse('ROWS(A1:E2)'); // returns `2`
parser.parse('COUNT(A1:E2)'); // returns `10`
parser.parse('COUNTIF(A1:E2, ">5")'); // returns `5`
想帮忙吗?
请看 捐款额。 。 。 .
更改日志
要查看最近更改的清单,见 发布部分。 。 。 .
许可证
麻省理工学院许可证(见 自由主义 file for the full text)). 页面存档备份,存于互联网档案馆.
联系人
你可以联系我们 你好@handsontable.com。 。 。 .