历史版本15 :增强公式编辑器插件 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本
JAR包版本增强公式编辑器插件版本
10.02019-10-20V4.9
9.02017-10-20V4.7

1.2 问题描述

FineReport 中使用公式时,都是采用结构化公式组合,如果要做复杂逻辑判断,需要采用 IF 等逻辑判断公式嵌套组成,这将会使得公式比较复杂,容易出错。

1.3 解决方案

通过安装「增强公式编辑器插件」,模板单元格中输入公式时,新增支持自定义脚本公式。如下图所示:

在做复杂逻辑判断时,自定义脚本公式可以使得公式编写更简洁。

注:插件安装后,自定义脚本公式仅支持在单元格内使用。

image.png

2. 插件介绍编辑

2.1 插件安装

点击下载插件:增强公式编辑器插件

设计器插件安装方法参照 设计器插件管理

服务器安装插件方法参照 服务器插件管理

注:使用了脚本公式的模板,在没有安装该插件的服务器上依然可以使用,但是无法进行编辑。

2.2 插件功能

安装了「增强公式编辑器」后的公式编辑界面,如下图所示:

1)新增支持脚本公式

2)新增实时计算功能,公式输入完毕后即可计算结果

注:插件安装后,自定义脚本公式仅支持在单元格内使用。

image.png

脚本公式中,内置了 3 个辅助函数,用于处理不同的数值类型,如下表格所示:

函数名  作用  调用方式 
int将参数转换为整数var x = int('${A2}');
number将参数转换为浮点数var y = number('${A3}');
array  将参数转换为数组var z = array('${A4}');

3. 示例编辑

3.1 自定义逻辑判断函数

新建模板,在A1单元格中写入公式 =RAND() * 60 返回一个 0 到 60 之间的随机数,A2 单元格值根据 A1 单元格值判定:0 <=A1<10 时,A2=1;10<=A1<20 时,A2 =2;...... 依次类推。

常规公式中 SWITCH 函数可实现此功能,下面我们用脚本公式的方式来实现上述功能,在A2单元格中增加脚本公式,内容如下:

var a1 = number('${A1}'); return int(a1 / 10) + 1;

点击保存,预览模板,效果如下图所示:

image.png

3.2 自定义循环函数

A1单元格中写入公式 =range(1, rand()*20) 随机产生一个最大值在0和20之间的数字序列,A2单元格内容为A1单元格数字序列中所有小于5的数减1组成的新序列,要实现此功能,一般的常用公式会非常复杂,所以可以用脚本公式实现,在A2单元格中输入以下公式:

var a1 = array('${A1}');
var r = [];
a1.forEach(function(value, index) {
if (value > 5) {
r.push(value - 1);
}
});
return r;

预览效果如下图所示:

image.png

3.3 嵌套常规函数

脚本函数中,除了使用单元格和参数外,也可以调用常规公式,比如求A1-D1单元格的和并判断和是否大于5,判断结果显示在A2单元格,即在A1-D1单元格随机输入数字,合并A2-D2单元格输入以下公式:

var r = number('${sum(A1:D1)}');
if (r < 5) {
    return "汇总值小于5";
} else {
    return "汇总值不小于5";
}

实现效果如下图所示:

image.png

4. 注意事项编辑

公式中的脚本定义完全遵循 ECMAScript3 语法规则,支持大部分 ES5 语法规则。

具体使用可参考:轻松学习 JavaScript