增强公式编辑器

编辑
  • 文档创建者:漩涡
  • 浏览次数:4029次
  • 编辑次数:14次
  • 最近更新:Kevin-s 于 2019-06-17
  • 1. 描述

    FineReport 中使用公式的时候,都是采用结构化的公式组合,即使是做逻辑判断,也需要采用 IF 等逻辑判断公式,无形中增加了公式的复杂度。

    2. 解决方案

    在 10.0 版本中,我们提供了更灵活的公式使用方式,通过使用插件,可以自己选择使用常规公式,也可以选择使用脚本公式。

    2.1 安装插件


    插件下载地址:https://market.fanruan.com/plugin/660

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

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

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


    2.2 增强公式编辑器视图

    先来看一看安装了增强公式编辑器后的公式编辑界面视图,如下图所示:


    注:不支持「检查合法性」

    除了可以支持常规公式和脚本公式外,还能提供实时计算功能,免去了每次写公式之后要知道计算结果,还得预览一次报表的烦恼。


    3. 使用教程

    3.1 逻辑判断函数的使用

    随意的新建一张报表,在A1格子中写入公式:=RAND() * 60,该公式的含义是返回一个 0 到 60 之间的随机数。我们需要 A2 格子的值根据 A1 格子的值的不同而不同——当A1格子的值为 0 到 10 之间的时候,A2 格子的值为 1,在 10 到 20 之间的时候,A2 格子的值为 2,如此类推,在 50 到 60 之间的时候,A2 格子的值为 6。

    为了实现这个功能,我们可以采用条件属性中的新值、也可以采用常规公式中的 SWITCH 函数,这两种实现我们不再多说,添加条件属性肯定是很麻烦的,用 SWITCH 函数要稍微好些。

    下面我们用脚本公式可以比较简洁的方式来实现,在A2格子中增加一个公式,切换为脚本公式,并输入内容:


    var a1 = number('${A1}');
    if (a1 >= 0 && a1 < 10) {
        return 1;
    } else if (a1 >= 10 && a1 < 20) {
        return 2;
    } else if (a1 >= 20 && a1 < 30) {
        return 3;
    } else if (a1 >= 30 && a1 < 40) {
        return 4;
    } else if (a1 >= 40 && a1 < 50) {
        return 5;
    } else if (a1 >= 50 && a1 <= 60) {
        return 6;
    }

    当然,这个示例只是为了体现使用多个if的场景,实际上这个完全是可以简化成

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


    效果如下图:


    3.2 循环函数的使用

    除了可以使用逻辑判断函数以外,脚本公式最大的优势就在于可以使用循环函数,比如遍历一个数组,过滤出需要的值。

    考虑下面一种场景:

    A1 格子是一个随机的从 1 到 20 的数组,用公式:=range(1, rand()*20)可以大致模拟,希望 A2 的值是 A1 中值大于 5 的数减一形成的新数组,这种情况用现有的常规公式实现就会比较麻烦,但是用脚本公式则很轻松:


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

    效果如下图:


    3.3 嵌套常规函数

    在脚本函数中,可以出了可以使用单元格和参数外,也可以正常的调用常规的公式,比如要求和,可以采用如下的方式:

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

    这样就可以求出 A1 到 D1 的所有格子的的和,并且当和大于 5 的时候,A2 格子的值为:汇总值小于 5,当和大于等于 5 的时候,A2 格子的值为:汇总时不小于5。

    效果如下图:


    4. 辅助函数

    在脚本公式中,内置了 3 个函数,用于处理不同的数值类型:

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


    5. 实时计算

    在编辑公式的过程中,比较痛苦的就是虽然实际变量不多,但是公式的逻辑比较复杂,每次修改了公式,都得点击报表的预览,才能知道修改正确了没有。增强公式编辑器插件就为了解决这个问题而提供了实时计算的功能。

    我们就以上面的循环函数使用为例子,直接点击实时计算:


    输入变量值之后直接点击确定,可以看得到计算结果:


    6. 语法规则

    公式中的脚本完全遵循 ECMAScript3 语法规则,支持大部分 ES5 语法规则,具体使用文档可以参考:http://wiki.jikexueyuan.com/project/javascript/syntax.html


    附件列表


    主题: 专题总结
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]