反馈已提交

网络繁忙

当前为10.0版本文档,只有最新版本的文档支持在线编辑修改,如果想创建/编辑文档,请移步至 最新版帮助文档

增强公式编辑器

  • 文档创建者:漩涡
  • 历史版本:16
  • 最近更新:cherishdqy 于 2020-10-29
  • 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

    附件列表


    主题: 报表专题
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    请前往「服务平台」,选择「在线支持」

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526