反馈已提交

网络繁忙

公式不合法报错

  • 文档创建者:Roxy
  • 历史版本:9
  • 最近更新:Catqiu 于 2023-04-18
  • 1. 概述

    1.1 版本

    报表服务器版本
    功能变动
    11.0.1

    语法报错优化

    公式编辑框增加「输入提示」和「关闭前检查」选项

    11.0.3

    对于多sheet、多报表块的模板公式报错时,公式报错具体到单元格所在sheet/报表块

    设计器报错日志支持点击定位错误位置

    1.2 应用场景

    函数计算格式 已经说明了在报表中使用函数的计算组成以及基础的计算语法,但有时用户也会遇到书写公式报错的问题,可根据提示完成公式的正确书写。

    FineReport11.0 对公式的校验规则和报错提示进行了优化。

    1.3 功能简介

    本文将详细介绍运算符和表达式的语法,帮助用户了解公式校验方案,正确有效的写出需要的函数。

    注1:FineReport11.0.2 以及之后的版本中,进行公式合法性检测时,如果公式中存在回车(\n)、tab (\t),则无法精准返回错误位置,如果您点击了查看报错,则光标默认回到公式首位(0位)。

    注2:非官方指定用法公式虽然提示公式合法,但无法保证准确性。

    2. 报错优先级说明

    报表中报错优先级为:

    • 语法错误

      缺少字符、缺少符号、无法识别字符、无法识别符号

    注:除了以上四种类型语法报错,其他语法报错均显示为公式不合法。

    • 函数错误

    • 函数参数类型错误

      函数参数个数错误

    3. 语法报错提示

    例如,在输入公式=count(A1{len(A1) != 0})统计 A1 单元格扩展出来的数据中不为空的个数后,由于输入成了count(A1{len(A1) != 0},缺少了一个),点击「检查合法性」进行校验,发现提示「缺少匹配的)」,点击「查看错误」,光标自动定位到报错的位置,如下图所示:

    4. 函数不合法提示

    4.1 文本函数

    函数 / 公式名
    合法性说明
    结果类型
    不合法提示

    CHAR

    一个在[1-65535](闭区间)范围内的数值参数

    文本

    CHAR不符合 (一个[1-65535]的数值) 的参数要求

    CODE

    一个文本参数

    数值

    CODE不符合 (文本) 的参数要求

    CONCATENATE

    多个任意类型参数

    文本

    --

    STARTWITH

    两个任意类型参数

    bool

    STARTWITH不符合 (任意类型,任意类型) 的参数要求

    ENDWITH

    两个任意类型参数

    bool

    ENDWITH不符合 (任意类型,任意类型) 的参数要求

    EXACT

    两个任意类型参数

    bool

    EXACT不符合 (任意类型,任意类型) 的参数要求

    FIND

    第一个参数任意类型

    第二个参数任意类型

    第三个缺省参数数值

    即:有2/3个参数均合法,3个参数时第三个参数必须为数值类型

    数值

    FIND不符合 (任意类型,任意类型) 或 (任意类型,任意类型,数值) 的参数要求


    FORMAT

    第一个参数为日期/数值/文本,第二个参数为文本

    文本

    FORMAT不符合 (日期/数值/文本,文本) 的参数要求

    INDEXOF

    两个参数,第一个为任意类型,第二个为数值

    文本

    INDEXOF不符合 (任意类型,数值) 的参数要求

    LEFT

    两个参数,第一个为任意类型,第二个为大于0的数值,可缺省

    文本

    LEFT不符合(任意类型) 或 (任意类型,数值) 的参数要求


    RIGHT

    两个参数,第一个为任意类型,第二个为大于0的数值,可缺省

    文本

    RIGHT不符合(任意类型) 或 (任意类型,数值) 的参数要求


    LOWER

    单文本参数

    文本

    LOWER不符合 (文本) 的参数要求

    MID

    第一个参数为任意类型,第二个,第三个为数值

    文本

    MID不符合 (任意类型,数值,数值) 的参数要求

    REGEXP

    两个参数或三个参数

    两个参数时:

    两个参数为文本

    三个参数时:

    前两个参数为文本,第三个参数为数值

    BOOL

    REGEXP不符合 (文本,文本)或(文本,文本,数值) 的参数要求


    REPEAT

    两个参数,第一个为任意类型,第二个为数值

    文本

    REPEAT不符合 (任意类型,数值) 的参数要求

    REPLACE

    1. 三个参数都是任意类型

    2. 四个参数,第一个是任意类型,第二个第三个是数值,第四个是任意类型

    文本

    REPLACE不符合 (任意类型,任意类型,任意类型) 或 (任意类型,数值,数值,任意类型) 的参数要求

    TODOUBLE

    单任意类型参数

    数值

    TODOUBLE不符合 (任意类型) 的参数要求

    TOINTEGER

    单任意类型参数

    数值

    TOINTEGER不符合 (任意类型) 的参数要求

    TOSTRING单任意类型参数文本TOSTRING不符合 (任意类型) 的参数要求

    TRIM

    单文本参数

    文本

    TRIM不符合 (文本) 的参数要求

    UPPER

    单文本参数

    文本

    UPPER不符合 (文本) 的参数要求

    LEN

    一个[文本、数字、数组]中任意单一类型参数

    数值

    LEN不符合 (任意类型) 的参数要求

    LEN不符合(一个[文本、数字、数组]中任意单一类型)的参数要求

    SPLIT两个任意类型的参数数组SPLIT不符合 (任意类型,任意类型)的参数要求

    4.2 日期函数

    函数 / 公式名合法性说明结果类型不合法提示
    DATE

    三个数值参数

    日期DATE不符合(数值,数值,数值)的参数要求
    DATEDELTA

    两个参数

    第一个日期或文本类型参数

    第二个为数值类型参数

    日期





    #函数名#不符合(日期/文本,数值)的参数要求

    MONTHDELTA

    两个参数

    第一个日期或文本类型参数

    第二个参数为数值

    时间
    YEARDELTA

    两个参数

    第一个日期或文本类型参数

    第二个参数为数值

    日期
    DATEDIF

    三个或四个参数

    三个参数时:

    第一、二个日期或文本类型参数

    第三个文本

    四个参数时:

    第一,二个日期或文本类型参数

    第三个是文本

    第四个是数值

    数值DATEDIF不符合(日期/文本,日期/文本,文本)或(日期/文本,日期/文本,文本,数值)的参数要求
    DATESUBDATE

    三个参数

    第一、二个日期或文本类型参数

    第三个是文本

    数值DATESUBDATE不符合(日期/文本,日期/文本,文本)的参数要求
    DATETONUMBER一个日期或文本类型参数数值DATETONUMBER不符合(日期/文本)的参数要求
    DAYVALUE一个日期或文本类型参数数值DAYVALUE不符合(日期/文本)的参数要求
    DAYSOFMONTH一个日期或文本类型参数数值


    #函数名#不符合(日期/文本/数值)的参数要求

    DAYSOFQUARTER一个日期或文本类型参数数值
    DAYSOFYEAR一个日期或文本类型参数数值
    YEAR

    无参或者一个参数或者两个参数

    一个缺省日期、数值、文本类型参数

    两个参数时为两个文本类型参数

    数值

    #函数名#不符合(无参) 或 (日期/数值/文本)或(日期/文本,文本)的参数要求

    WEEK

    一、二、三、四个参数均可

    一个参数时(日期/数值/文本)

    二个参数时为(日期/文本,文本)

    三个参数时为(日期/文本,文本,文本)

    四个参数时为(日期/文本,文本,文本,文本)

    数值#函数名#不符合(无参) 或 (日期/数值/文本)的参数要求
    DAY

    无参或者一个参数或者两个参数

    一个缺省日期、数值、文本类型参数

    两个参数时为两个文本类型参数

    数值#函数名#不符合(无参) 或 (日期/数值/文本)或(日期/文本,文本)的参数要求
    HOUR

    无参或者一个参数或者两个参数

    一个缺省日期、数值、文本类型参数

    两个参数时为两个文本类型参数

    数值#函数名#不符合(无参) 或 (日期/数值/文本)或(日期/文本,文本)的参数要求
    MINUTE

    无参或者一个参数或者两个参数

    一个缺省日期、数值、文本类型参数

    两个参数时为两个文本类型参数

    数值#函数名#不符合(无参) 或 (日期/数值/文本)或(日期/文本,文本)的参数要求
    MONTH

    无参或者一个参数或者两个参数

    一个缺省日期、数值、文本类型参数

    两个参数时为两个文本类型参数

    数值#函数名#不符合(无参) 或 (日期/数值/文本)或(日期/文本,文本)的参数要求
    SECOND

    无参或者一个参数或者两个参数

    一个缺省日期、数值、文本类型参数

    两个参数时为两个文本类型参数

    数值#函数名#不符合(无参) 或 (日期/数值/文本)或(日期/文本,文本)的参数要求
    TIME

    三个数值参数

    时间#函数名#不符合 (数值,数值,数值)的参数要求

    TODATE

    1. 单参,参数为数值或日期或者文本

    2. 两个参数全是文本

    3. 两个参数全是文本

    时间TODATE不符合(日期/数值/文本) 或 (文本,文本)或 (文本,文本,文本)的参数要求
    NOW无参时间NOW不符合(无参)的参数要求
    TODAY无参
    TODAY不符合(无参)的参数要求
    WEEKDATE四个数值参数时间WEEKDATE不符合(数值,数值,数值,数值)的参数要求
    WEEKDAY

    一个日期或文本类型参数

    数值WEEKDAY不符合(日期/文本)的参数要求

    4.3 数学和三角函数

    函数 / 公式名合法性说明返回类型公式不合法提示
    PI一个数值类型参数,可缺省数值PI不符合(数值)或(空)的参数要求
    CEILING










    单数值参数










    数值










    #函数名#不符合(数值)的参数要求

    Floor
    INT
    SQRT
    LN
    SQRT
    ABS
    ACOS
    ASIN
    ATAN
    LOG10
    SIN
    TAN
    COS
    EXP
    DEGREES
    SIGN
    RADIANS
    RAND无参数值RAND不符合(无参)的参数要求
    RANGE

    1-3个数值参数

    合法规则为0<参数个数< 3且参数为数值类型

    数组RANGE不符合(数值,数值,数值)的参数要求
    SUM无参数个数限制,任意类型数值
    COUNT无参数个数限制,任意类型数值
    MIN大于0个数值参数数值#函数名# 不符合所有参数为相同类型的要求
    MAX
    RANDBETWEEN

    两个数值参数

    数值

    #函数名#不符合(数值,数值)的参数要求

    MOD两个数值参数数值#函数名#不符合(数值,数值)的参数要求
    POWER两个数值参数数值#函数名#不符合(数值,数值)的参数要求
    ROUND

    两个数值参数

    三个参数:前两个数值,第三个布尔

    数值#函数名#不符合(数值,数值)或(数值,数值,布尔)的参数要求
    ATAN2两个数值参数数值#函数名#不符合(数值,数值)的参数要求
    PROMOTION两个数值参数数值#函数名#不符合(数值,数值)的参数要求
    LOG

    第一个参数数值,第二个缺省数值

    数值#函数名#不符合(数值,数值)或(数值)的参数要求
    TRUNC

    4.4 逻辑函数

    注: 报表公式中没有数值与bool类型之间的转换,所以当前公式仅支持 bool 类型参数,不支持数字与 bool 类型的转换。

    函数 / 公式名
    合法性说明
    结果类型
    不合法提示
    AND参数为bool类型或数值类型boolAND的参数类型必须为布尔类型或数值类型
    OR参数为bool类型或数值类型boolOR的参数类型必须为布尔类型为bool类型或数值类型
    IF

    IF,三个参数,第二个和第三个参数为数值或文本类型,第一个为为bool类型(此处bool类型不包括数字)

    返回结果参数中第一个非空的参数类型(第二个和第三个参数为返回值参数)

    第一个参数不为bool类型时提示:IF表达式的第一个参数不符合布尔类型为bool类型

    IF表达式第二、三个参数不为数值或文本类型时提示:IF表达式的结果类型必须为文本或数值类型

    不满足三个参数个数时提示:IF表达式不满足3个参数的参数个数要求


    SWITCH

    参数个数至少3个,且结果参数类型一致

    返回结果参数中第一个非空的参数类型(switch函数,第2n+1个参数是返回参数n>0)SWITCH表达式中的结果类型必须相同
    REVERSE一个bool类型参数(只能是true或者false,不能用0/1代替)boolREVERSE不符合(bool类型)的参数要求
    ||,&&参数为bool类型或数值类型bool

    #符号#只能连接两个布尔类型为bool类型或数值类型的表达式

    4.5 数据集函数

    函数/公式名
    合法性说明
    结果类型
    不合法提示
    SQL

    三个或四个参

    数前两个参数为字符型,后两个为整型,后两个参数可仅写一个

    任意类型#函数名#不符合(字符,字符,整型,整型)的参数要求
    ROW无参数数字#函数名#不符合ROW(无参)要求
    MAP

    四个参数:前两个参数是任意类型,第三、四个参数为数字或文本

    任意类型#函数名#不符合(任意类型,任意类型,数字/文本,数字/文本)的参数要求

    4.6 其他函数

    函数 / 公式名
    合法性说明
    结果类型
    不合法提示
    ISNULL无参或单个任意类型参数boolISNULL不符合(无参)或(任意类型)的参数要求
    NVL不限个数不限类型任意类型NVL不符合所有参数为相同类型的要求
    INDEX不限参数类型和个数整数数值
    EVAL不限类型数值
    SEQ不限类型数值
    UUID单个数值参数,可缺省文本UUID不符合(无参) 或 (数值)的参数要求

    4.7 数组函数

    函数 / 公式名
    合法性说明
    结果类型
    不合法提示
    ARRAY不限类型不限个数数组
    INARRAY两个参数,第一个参数为任意类型,第二个参数为数组类型数值INARRAY不符合 (任意类型,数组)的参数要求
    JOINARRAY两个参数,第一个参数为数组类型,第二个参数为任意类型数组JOINARRAY不符合 (数组,任意类型)的参数要求
    INDEXOFARRAY两个参数,第一个参数为数组类型,第二个参数为数值类型任意类型INDEXOFARRAY不符合 (数组,数值)的参数要求
    ||,&&参数为bool类型或数值类型bool

    #符号#只能连接两个布尔类型为bool类型或数值类型的表达式

    5. 快速定位错误公式位置

    • FineReport 11.0.3 支持当多sheet、多报表块的模板公式报错时,公式报错具体到单元格所在sheet/报表块

    例如 cpt 模板「横向扩展后某列数据占比」sheet2 C1 单元格只有= 没有其他内容,如下图所示:

    此时预览模板,会出现如下报错,公式报错内容包括所在模板、sheet以及单元格:

    注:多 sheet 模板显示公式报错所在 sheet 为阿拉伯数字,从 0 开始;如果是 frm 模板,则显示公式所在报表块。

    更多报错说明如下所示:


    公式日期格式错误导致计算中止错误代码:11300301 日期格式有误,公式计算中止
    单元格等号后公式内容为空错误代码:11300302 单元格等号后公式内容为空
    公式中除数为零 

    错误代码:11300303 公式中除数为零:XX(具体单元格)

    公式计算错误错误代码:11300310  公式计算错误:XX(具体单元格),出错内容:YY(具体原公式)

    注:填报属性内的公式、控件内的公式等在暂时不支持定位。


    • FineReport 11.0.3 设计器报错日志支持点击定位错误位置

    为了更方便用户快速定位到报错单元格,日志面板中公式错误位置将「超链样式」显示,点击后,如果报错模板处于打开状态,将直接定位至超链单元格,多sheet及多报表块模板将跳转到对应sheet/报表块,如下图所示:

    2022-11-18_14-36-23.gif

    如果报错模板未打开则打开模板并跳转。


    附件列表


    主题: 报表专题
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持