历史版本9 :常用函数集合插件 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

前言编辑

在FineReport中使用公式的时候,如果需要在公式中做判断,就需要使用IF或者SWITCH函数,这两个函数有时候还会嵌套,很不利于阅读。

解决方案编辑

使用常用函数插件:http://shop.finereport.com/ShopServer?pg=product&pid=512

使用了该插件后,可以在SciptEval函数中使用JavaScript语法。

下面我们来做一个对比:

在模板中A4格式是一个扩展格子(向下扩展),值为[1,2,3,4,5],加入我们需要让B4格子的值满足以下条件

当A4的值大于4的时候,返回A4 * 2的值,当A4的值小于4且大于1的时候,返回A4减2的绝对值,其他时候,返回A4的A4的2次方。

如果用传统的函数,写法大概是这样的

if(A4 > 4, A4 * 2, if(and(A4 < 4, A4 > 1), abs(A4 - 2), power(A4, 2)))

而如果使用ScriptEval函数写法大概是这样的

ScriptEval('if(a > 4) {return a * b;} else if (a < 4 && a > 1){return Math.abs(a - b);} else {return Math.pow(a, b)}', "a", A4, "b", 2)


运行结果是这样的(把两种写法汇总到一起做对比)

可以看到结果完全没有差别,但是使用JavaScript语法有更灵活实现和更丰富的表达方式。

注意:对JavaScript表达式的唯一要求是符合JavaScript语法并且有有返回值。例如ScriptEval('return Math.max(p1, p2)', "p1", A1, "p2", B1),等价于max(A1, B1)。

参数说明编辑

ScriptEval的第一个参数需要是一个字符串,字符串中是一个合法的JavaScript表达式,后续的参数参数分别表示JavaScript的参数名1,参数值1,参数名2,参数值2等等,由于参数名和参数值总是成对出现的,所以总的参数的个数必须是奇数个。设定的参数名可以在JavaScript中使用。

使用ScriptEval函数进行数组过滤编辑

ScriptEval('var r = [];origin.forEach(function(item, i){if(item % 2 == 0){r.push(item);}});return r;',"origin",A4)


在单元格中写上如上的公式,可以过滤出A4中所有的偶数值并作为一个数组返回。